tl;博士
Instant.parse ( "2010-04-05T17:16:00Z" )
ISO 8601 标准
您的字符串符合ISO 8601标准(其中提到的RFC 3339是一个配置文件)。
避免使用 java.util.Date
与 Java 捆绑在一起的 java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。
而是使用Joda-Time库或 Java 8 中的新 java.time 包。两者都使用 ISO 8601 作为它们解析和生成日期时间值的字符串表示的默认值。
java.time
Java 8 和更高版本中内置的java.time框架取代了麻烦的旧 java.util.Date/.Calendar 类。新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继任者,在概念上相似但重新架构。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅教程。
java.time 中的类代表UTC时区Instant
时间线上的时刻。
Z
输入字符串末尾的Zulu
代表UTC
. 这样的字符串可以直接被Instant
类解析,不需要指定格式化程序。
String input = "2010-04-05T17:16:00Z";
Instant instant = Instant.parse ( input );
转储到控制台。
System.out.println ( "instant: " + instant );
瞬间:2010-04-05T17:16:00Z
从那里您可以应用时区 ( ZoneId
) 将其调整Instant
为ZonedDateTime
. 搜索 Stack Overflow 以获取讨论和示例。
如果必须使用java.util.Date
对象,可以调用添加到旧类中的新转换方法进行转换,例如静态方法java.util.Date.from( Instant )
。
java.util.Date date = java.util.Date.from( instant );
乔达时间
Joda-Time 2.5 中的示例。
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ):
DateTime dateTime = new DateTime( "2010-04-05T17:16:00Z", timeZone );
转换为 UTC。
DateTime dateTimeUtc = dateTime.withZone( DateTimeZone.UTC );
如有必要,转换为 java.util.Date。
java.util.Date date = dateTime.toDate();