谢谢。
系统默认场所差异。
SimpleDateFormat Sdf = new SimpleDateFormat(" MMM D,Yyyy H:MM:SS A",locale.English);
解决。
字符串到日期错误
字符串:Feb 13, 2017 10:25:43 AM
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy h:mm:ss a");
或MMM d, yyyy h:mm:ss a
,MMM d, yyyy hh:mm:ss a
,MMM dd, yyyy h:mm:ss a
,MMM dd, yyyy hh:mm:ss a
,MMM dd, yyyy H:mm:ss a
,MMM dd, yyyy HH:mm:ss a
...等
parseexception :::::无法避免的日期:" 2017年2月13日上午10:25:43"
plz帮助。
tl; dr
LocalDateTime.parse(
"Feb 13, 2017 10:25:43 AM" ,
DateTimeFormatter.ofPattern( "MMM d, uuuu hh:mm:ss a" , Locale.US )
)
2017-02-13T10:25:43
java.Time
您正在使用麻烦的旧日期类别,这些类别现在是遗产,由 java.time 类取代。
指定格式模式以匹配您的输入。请注意,我们通过Locale
来指定翻译月份名称等的人类语言和文化规范。
String input = "Feb 13, 2017 10:25:43 AM" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM d, uuuu hh:mm:ss a" , Locale.US ) ;
您的输入字符串缺少时区域或Offset-from-UTC的任何指标。因此将其解析为LocalDateTime
。
LocalDateTime ldt = LocalDateTime.parse( input , f );
ldt.tostring():2017-02-13T10:25:43
顺便说一句,如果您的输入在一年之后有逗号,则您可以使用自动局部式格式器来解析,而不是费心定义格式化模式。这个逗号显然是美国的常态(至少)。
String input = "Feb 13, 2017, 10:25:43 AM" ; // With a comma after year, apparently the norm in the United States.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM ).withLocale( Locale.US )
LocalDateTime ldt = LocalDateTime.parse( input , f );
关于 java.time
java.Time 框架内置在Java 8及以后的框架中。这些类取代了麻烦的旧旧日期时间类,例如java.util.Date
,Calendar
&SimpleDateFormat
。
现在处于维护模式的 joda time 项目建议迁移到Java.Time类。
要了解更多信息,请参见 oracle教程。并搜索堆栈溢出以获取许多示例和解释。规格是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,不需要java.sql.*
类。
从哪里获得Java.Time课程?
- Java SE 8 , Java SE 9 ,然后
- 内置。
- 标准Java API的一部分,具有捆绑的实现。
- Java 9添加了一些次要功能和修复。
- Java SE 6 和 Java SE 7
- 大部分Java.Time功能都回到Java 6&7在 Threeten-Backport 。
- Android
- Java.Time类的Android Bundle实现的后来版本。
- 对于较早的Android, threetenabp 项目适应 threeten-backport (如上所述)。请参阅如何使用Threetenabp…。
Threeten-Extra 项目扩展了Java.Time,并提供其他类。该项目是可能将来在Java.Time中增加的遗嘱。您可能在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
等。