Java-无法解析的日期

| 我正在尝试解析一个日期,但奇怪的是我遇到了一个例外。 这是代码:
import java.util.Date;

String strDate = \"Wed, 09 Feb 2011 12:34:27\";
Date date;
SimpleDateFormat FORMATTER =  new SimpleDateFormat(\"EEE, dd MMM yyyy HH:mm:ss\");
try {
  date = FORMATTER.parse(strDate.trim());
  System.out.println(date);
} catch (ParseException e) {
  e.printStackTrace();
}
例外是:   java.text.ParseException:无法解析   日期:“ 2011年2月9日星期三12:34:27 \”   java.text.DateFormat.parse(DateFormat.java:337)     在DateTest.main(DateTest.java:17) 我已经阅读了文档,我认为我的模式是正确的。所以我不明白... 任何想法? 谢谢!     
已邀请:
        这可能是因为您计算机上的默认语言环境不是英语。 您应该使用:
new SimpleDateFormat(\"EEE, dd MMM yyyy HH:mm:ss\", Locale.ENGLISH);
代替。     
        tl; dr
java.util.Date.from (

    LocalDateTime.parse( 
        \"Wed, 09 Feb 2011 12:34:27\" , 
        DateTimeFormatter.ofPattern( \"EEE, dd MMM uuuu HH:mm:ss\" , Locale.US )
    ).atZone( ZoneId.of( \"America/Montreal\" ) )
     .toInstant()

)
细节 Question和其他Answer都使用过时且麻烦的旧日期时间类,这些类现在已被遗留,由java.time类取代。 使用java.time 输入字符串缺少任何时区或UTC偏移量的指示。因此,我们将其解析为
OffsetDateTime
。 指定一个ѭ4来确定(a)日名,月名等的翻译所用的人类语言,以及(b)决定缩写,大写,标点,分隔符等问题的文化规范。
String input = \"Wed, 09 Feb 2011 12:34:27\" ;
Locale l = Locale.US ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( \"EEE, dd MMM uuuu HH:mm:ss\" , l ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
  ldt.toString():2011-02-09T12:34:27 时区 问题和其他答案都忽略了时区这一关键问题。 输入的字符串缺少时区或偏移量。我们将其解析为
LocalDateTime
,这不是时间轴上的时刻,只是关于可能时刻的模糊概念。就像说“圣诞节从2017年12月25日午夜开始”一样,直到将其置于特定时区的上下文中时,它才有意义。圣诞节在新西兰的奥克兰比法国的巴黎要早得多,圣诞节在魁北克蒙特利尔也要晚得多。 如果您知道预期的时区,请分配一个
ZoneId
以产生一个
ZonedDateTime
ZoneId z = ZoneId.of( \"America/Montreal\" ) ;
ZonedDateTime zdt = ldt.atZone( z ); // Assigning a time zone to determine an actual moment on the timeline.
转换中 最好避免麻烦的旧传统日期时间类。但是,如果必须与尚未更新为java.time类型的旧代码进行交互,则可以在旧类和java.time之间进行转换。期待将新方法添加到旧类中。 在UTC时间轴上,ѭ10是时刻。因此,我们需要从
ZonedDateTime
中提取
Instant
Instant
类表示UTC时间轴上的时刻,分辨率为纳秒(最多十进制的九(9)位数字)。
Instant instant = zdt.toInstant() ;
java.util.Date d = java.util.Date.from( instant ) ;  // Convert from java.time to legacy class.
走另一个方向。
Instant instant = d.toInstant() ;  // Convert from legacy class to java.time class.
ZonedDateTime zdt = instant.atZone( z ) ;  // Adjust from UTC into a particular time zone.
关于java.time java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧式传统日期时间类,例如
java.util.Date
Calendar
SimpleDateFormat
。 现在处于维护模式的Joda-Time项目建议迁移到java.time类。 要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。 您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要
java.sql.*
类。 在哪里获取java.time类? Java SE 8,Java SE 9,Java SE 10和更高版本 内置的 标准Java API的一部分,具有捆绑的实现。 Java 9添加了一些次要功能和修复。 Java SE 6和Java SE 7 很多java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。 安卓系统 更高版本的Android捆绑了java.time类的实现。 对于早期的Android(<26),ThreeTenABP项目改编了ThreeTen-Backport(如上所述)。请参阅如何使用ThreeTenABP…。 ThreeTen-Extra项目使用其他类扩展了java.time。该项目是将来可能向java.time添加内容的试验场。您可能会在这里找到一些有用的类,例如
Interval
YearWeek
YearQuarter
等。     

要回复问题请先登录注册