gpt4 book ai didi

java - 将字符串时间戳转换为符合 ISO 8601 的字符串

转载 作者:行者123 更新时间:2023-12-01 17:57:15 24 4
gpt4 key购买 nike

我有一个字符串格式的时间戳和偏移量,如下所示在两个不同的变量中:

01/14/2016 07:37:36PM
-08:00

我想将上面的时间戳转换为 ISO 8601 兼容字符串,带有毫秒和时区,因此转换后应该如下所示:

2016-01-14T19:37:36-08:00

我怎样才能做到这一点?我正在使用 jodatime 库。

最佳答案

较新的 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

关于java - 将字符串时间戳转换为符合 ISO 8601 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43698451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com