较新的 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
java.time 中的类(我只使用其中的几个)在 JSR-310 中进行了描述,并且内置于 Java 8 中。如果您想在 Java 6 或 7 中使用它们怎么办?你得到了 ThreeTen Backport(下面的链接)。它为您提供了 Java 6 和 7 的大部分类。我不太高兴告诉您您需要一个外部库,但在这种情况下,它只是在您迁移到 Java 8 之前。我希望您很快就会这样做。
我相信 JodaTime 也可以做到,但我没有这方面的经验,所以不能在那里给你详细信息。我所知道的,我已经阅读了 JodaTime 背后的人,现在建议你改用 java.time。因此,我要求您将一个外部库换成一个更新的(据说更好)的库。就其本身而言,我对此并不不满。仅当您已经有一个使用 JodaTime 的代码库时,这才不是微不足道的。
链接:ThreeTen Backport