解析字符串到日期
我要解析的字符串:
太阳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.from
和Date::toInstant
方法。
关于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 SE 11及更高版本 – 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和Java 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的试验场。 您可以在这里找到一些有用的课程,如Interval
, YearWeek
, YearQuarter
等。
问题是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