How to convert string to date object in java
我有一个这种格式的字符串
如何将此字符串转换为Java对象,以便从日期对象获得时间和分钟。
我试过这样,
1 2 3 4 5 6 7 8 9 10 11 12 | import java.util.Date; import java.text.SimpleDateFormat; import java.text.ParseException; public class DateEg { public static final void main(String[] args) { SimpleDateFormat localDateFormat = new SimpleDateFormat("HH:mm"); String oldstring ="Mar 19 2018 - 14:39"; String time = localDateFormat.format(oldstring); System.out.println(time); } } |
但得到错误,说
1 2 3 4 | Exception in thread"main" java.lang.IllegalArgumentException: Cannot format given Object as a Date at java.base/java.text.DateFormat.format(DateFormat.java:332) at java.base/java.text.Format.format(Format.java:158) at DateEg.main(DateEg.java:9) |
在Java中解析这个字符串格式是可能的吗?
DR
1 2 3 4 5 6 | LocalDateTime.parse( // Parse as a `LocalDateTime` because the input lacks indication of zone/offset. "Mar 19 2018 - 14:39" , DateTimeFormatter.ofPattern("MMM dd uuuu - HH:mm" , Locale.US ) ) // Returns a `LocalDateTime` object. .toLocalTime() // Extract a time-of-day value. .toString() // Generate a String in standard ISO 8601 format. |
14:39
Java.时间
现代方法使用java.time类。
定义与输入匹配的格式模式。指定
1 2 3 |
分析为
1 | LocalDateTime ldt = LocalDateTime.parse( input , f ); |
提取一天中的时间值,不带日期和时区,因为这是问题的目标。
1 | LocalTime lt = ldt.toLocalTime(); |
ldt.toString(): 2018-03-19T14:39
lt.toString(): 14:39
国际标准化组织8601
你输入的格式很糟糕。将日期时间值序列化为文本时,请始终使用标准ISO 8601格式。
在解析/生成字符串时,java.time类默认使用标准的iso8601格式。你可以在这个答案中看到上面的例子。
关于JavaTimesJavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如
现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要
在哪里获取java.time类?
- Java SE 8、Java SE 9及以后
- 内置的。
- 标准JAVA API的一部分与捆绑实现。
- Java 9添加了一些小的特性和修复。
- Java SE 6和Java SE 7
- 大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
- 安卓
- java.time类的Android包实现的更高版本。
- 对于早期的Android(<26),threetenabp项目适应threeten backport(如上所述)。看看如何使用三连珠……
threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如
使用正确的格式化程序对下面提到的字符串进行分析
1 2 3 4 5 6 7 8 | SimpleDateFormat localDateFormat = new SimpleDateFormat("MMM dd yyyy - HH:mm"); String oldstring ="Mar 19 2018 - 14:39"; Date date=localDateFormat.parse(oldstring); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int hours = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); int seconds = calendar.get(Calendar.SECOND); |
尝试使用这个,应该可以:
1 2 3 4 5 | DateTimeFormatter formatter = DateTimeFormat.forPattern("MMM dd yyyy - HH:mm"); LocalDateTime dt = formatter.parse(oldstring);` DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("HH:mm"); String time = timeFormat.format(dt).toString();` |
如果您可以使用外部库,那么ApacheCommonDateUtils提供了许多实用程序类,您可以使用它们来处理日期。为了将字符串解析为对象,可以使用以下示例:
1 | public static Date parseDate(String str, Locale locale, String... parsePatterns) throws ParseException |
Parses a string representing a date by trying a variety of different
parsers, using the default date format symbols for the given locale.The parse will try each parse pattern in turn. A parse is only deemed
successful if it parses the whole of the input string. If no parse
patterns match, a ParseException is thrown.The parser will be lenient toward the parsed date.
Parameters:str - the date to parse, not nulllocale - the locale whose
date format symbols should be used. If null, the system locale is used
(as per parseDate(String, String...)).parsePatterns - the date format
patterns to use, see SimpleDateFormat, not nullReturns:the parsed
dateThrows:IllegalArgumentException - if the date string or pattern
array is nullParseException - if none of the date patterns were
suitable (or there were none)Since:3.2