解析字符串到日期

我要解析的字符串:

太阳11月10日10:00:00 CET 2013

我的代码:

substrings = "Sun Nov 10 10:00:00 CET 2013" SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy"); Date date = parserSDF.parse(substrings); 

编译错误输出:

java.text.ParseException:Unparseable date:“Sun Nov 10 10:00:00 CET 2013”​​at java.text.DateFormat.parse(Unknown Source)…

可能你错过了正确的Locale。 在您的示例中尝试这样做:

  SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy", Locale.US); 

ZZZ将尝试根据RFC 822时区格式化时区,改为使用zzz。

这是JavaDoc链接供参考

java.time

现代方法使用java.time类。

 String input = "Sun Nov 10 10:00:00 CET 2013"; DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" , Locale.US ); ZonedDateTime zdt = ZonedDateTime.parse( input , f ); 

zdt.toString():2013-11-10T10:00 + 01:00 [欧洲/巴黎]

几年前java.time.Instant类替换了可怕的旧java.util.Date类。 两者都代表UTC的时刻。 要从上面的时区调整到UTC,只需提取Instant对象即可。

 Instant instant = zdt.toInstant() ; // Adjust from time zone to UTC. 

避免使用java.util.Date 。 但是,如果必须与尚未更新到java.time的旧代码进行互操作,则可以来回转换。 请参阅添加到旧类的新方法,例如Date.fromDate::toInstant方法。


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

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

要了解更多信息,请参阅Oracle教程 。 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310 。

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

从哪里获取java.time类?

  • Java SE 8Java SE 9Java SE 10Java SE 11及更高版本 – 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小function和修复。
  • Java SE 6Java SE 7
    • 大多数java.timefunction都在ThreeTen- Backport中反向移植到Java 6和7。
  • Android的
    • 更高版本的Android捆绑java.time类的实现。
    • 对于早期的Android(<26), ThreeTenABP项目采用ThreeTen-Backport (如上所述)。 请参见如何使用ThreeTenABP ….

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的课程,如IntervalYearWeekYearQuarter等。

问题是parserSDF采用字符串而不是数组和ParsePosition。 我写这个是为了输出我想你想要的东西。

 import java.text.*; public class Parser{ public static void main(String[] args){ String input = "Sun Nov 10 10:00:00 CET 2013"; SimpleDateFormat parserSDF = new SimpleDateFormat("EEE MMM d HH:mm:ss ZZZ yyyy"); System.out.println(parserSDF.parse(input, new ParsePosition(0))); } } 

我建议在API中查看SimpleDateFormat和ParsePosition