将字符串时间戳转换为符合 ISO 8601 的字符串
convert string timestamp to ISO 8601 compliant string
我有一个字符串格式的时间戳和偏移量,如下所示在两个不同的变量中:
01/14/2016 07:37:36PM
-08:00
我想把上面的时间戳转换成ISO 8601 compliant String, with milliseconds and timezone
所以转换后应该是这样的:
2016-01-14T19:37:36-08:00
我该怎么做?我正在使用 jodatime 库。
您可以在示例部分找到更多示例:- 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);
较新的 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
不存在?我知道在这种情况下,您需要 Z
的 UTC 偏移量。例如像这样:
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(下方 link)。它为 Java 6 和 7 提供了 类 的大部分。我不太乐意告诉你你需要一个外部库,但在这种情况下,直到你移动到 Java 8. 希望你快点。
我相信它也可以用 JodaTime 来完成,但我没有这方面的经验,所以不能给你那里的细节。我所知道的是,我读过 JodaTime 背后的人现在建议您改用 java.time
。因此,我要求您将一个外部库换成一个更新的(据说更好的)库。就其本身而言,我对此并不不满。只有当你已经有一个使用 JodaTime 的代码库时,它才不是那么简单。
Link: ThreeTen Backport
我有一个字符串格式的时间戳和偏移量,如下所示在两个不同的变量中:
01/14/2016 07:37:36PM
-08:00
我想把上面的时间戳转换成ISO 8601 compliant String, with milliseconds and timezone
所以转换后应该是这样的:
2016-01-14T19:37:36-08:00
我该怎么做?我正在使用 jodatime 库。
您可以在示例部分找到更多示例:- 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);
较新的 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
不存在?我知道在这种情况下,您需要 Z
的 UTC 偏移量。例如像这样:
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(下方 link)。它为 Java 6 和 7 提供了 类 的大部分。我不太乐意告诉你你需要一个外部库,但在这种情况下,直到你移动到 Java 8. 希望你快点。
我相信它也可以用 JodaTime 来完成,但我没有这方面的经验,所以不能给你那里的细节。我所知道的是,我读过 JodaTime 背后的人现在建议您改用 java.time
。因此,我要求您将一个外部库换成一个更新的(据说更好的)库。就其本身而言,我对此并不不满。只有当你已经有一个使用 JodaTime 的代码库时,它才不是那么简单。
Link: ThreeTen Backport