ParseException:不可解析的日期异常

谢谢。

系统默认的区域差异。

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 aMMM d, yyyy hh:mm:ss aMMM dd, yyyy h:mm:ss aMMM dd, yyyy hh:mm:ss aMMM dd, yyyy H:mm:ss aMMM dd, yyyy HH:mm:ss a ...等

ParseException ::::: Unparseable date:“Feb 13,2017 10:25:43 AM”

plz帮助。


TL;博士

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 ) ;

您的输入字符串缺少任何时区或偏离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.DateCalendarSimpleDateFormat等麻烦的旧式遗留日期时间类。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程。 并搜索堆栈溢出了很多例子和解释。 规范是JSR 310。

您可以直接与数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC驱动程序。 不需要字符串,不需要java.sql.*类。

何处获取java.time类?

  • Java SE 8Java SE 9和更高版本
  • 内置。
  • 带有捆绑实现的标准Java API的一部分。
  • Java 9增加了一些次要功能和修复。
  • Java SE 6Java SE 7
  • 大部分java.time功能都在ThreeTen-Backport中移植到Java 6和7。
  • Android的
  • 后续版本的java.time类的Android捆绑实现。
  • 对于早期的Android, ThreeTenABP项目采用ThreeTen-Backport(上文提到)。 请参阅如何使用ThreeTenABP ...。
  • ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 您可以在这里找到一些有用的课程,例如IntervalYearWeekYearQuarter等。


    尝试这个。

    Date dNow = new Date();
                SimpleDateFormat ft = new SimpleDateFormat(
                        "E yyyy.MM.dd 'at' hh:mm:ss a zzz");
    
                System.out.println("Current Date: " + ft.format(dNow));
                String CurrentTime = ft.format(dNow);
    
    链接地址: http://www.djcxy.com/p/18609.html

    上一篇: ParseException: Unparseable date exception

    下一篇: ParseException When Parsing a Date from InputStream