我有一个字符串格式的时间戳和偏移量,如下所示,有两个不同的变量:
01/14/2016 07:37:36PM
-08:00
我想将上面的时间戳转换为ISO 8601 compliant String, with milliseconds and timezone
,因此在转换后它应该如下所示:
2016-01-14T19:37:36-08:00
我该怎么做?我正在使用jodatime库。
答案 0 :(得分:4)
较新的java.time
类在ISO 8601字符串中运行良好。
String dateTimeString = "01/14/2016 07:37:36PM";
String offsetString = "-08:00";
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString,
DateTimeFormatter.ofPattern("MM/dd/uuuu hh:mm:ssa"));
ZoneOffset offset = ZoneOffset.of(offsetString);
String formattedTimestamp = dateTime.atOffset(offset).toString();
System.out.println(formattedTimestamp);
打印
2016-01-14T19:37:36-08:00
远离过时的课程,例如SimpleDateFormat
。
什么是offsetString
不存在?据我所知,在这种情况下,您希望UTC的偏移量为Z
。例如:
ZoneOffset offset;
if (offsetString == null) {
offset = ZoneOffset.UTC;
} else {
offset = ZoneOffset.of(offsetString);
}
String formattedTimestamp = dateTime.atOffset(offset).toString();
我们现在获得null
offsetString
2016-01-14T19:37:36Z
JSR-310中描述了java.time
中的类(其中我只使用了几个),内置了Java 8.如果你想在Java 6或7中使用它们怎么办? ?你得到了ThreeTen Backport(链接如下)。它为您提供了Java 6和7的大多数类。我不是很高兴地告诉您需要一个外部库,但在这种情况下,只有在您转到Java 8之后才会这样。我希望您能尽快。
我相信它也可以用JodaTime完成,但我没有经验,所以不能在那里给你详细信息。我所知道的,我已经阅读了JodaTime背后的人,现在建议你转而去java.time
。所以我要求你换一个外部库来换一个更新的(也可能是更好的)库。我本人并不满足于此。只有当你已经有一个使用JodaTime的代码库时,它才真正无足轻重。
答案 1 :(得分:0)
您可以在以下示例中找到更多示例: - http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String string2 = "2001-07-04T12:08:56.235-07:00";
Date result2 = df2.parse(string2);