gpt4 book ai didi

java - 在 OffsetDateTime java 中解析没有偏移量的日期时间

转载 作者:行者123 更新时间:2023-11-30 06:22:10 25 4
gpt4 key购买 nike

我可以使用 OffsetDateTime.parse(....) 以某种方式解析没有偏移的日期时间

Java代码:

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX");
OffsetDateTime date = OffsetDateTime.parse("2017-02-03 12:30:3000", FORMATTER);

我得到的日期时间是一个没有偏移量的String,但需要将其解析为OffsetDateTime,我知道我在这里需要一个偏移量,但是我可以改变一下吗该String插入默认/虚拟偏移量(可能是+00:00)并使用OffsetDateTime解析它。问题是对象必须是 OffsetDateTime

最佳答案

最简单的解决方案是将字符串解析为 LocalDateTime 然后转换:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
OffsetDateTime date = LocalDateTime.parse("2017-02-03 12:30:30", formatter)
.atOffset(ZoneOffset.UTC);

这给出 OffsetDateTime2017-02-03T12:30:30Z,其中 Z 表示 UTC 或偏移量零。

如果需要,您可以直接解析为OffsetDateTime:

DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
.toFormatter();
OffsetDateTime date = OffsetDateTime.parse("2017-02-03 12:30:30", FORMATTER);

最后,如果您需要使用问题中给出的格式化程序,那么更改字符串以适应当然是一种选择。例如:

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX");
String fixedDateTimeString
= "2017-02-03 12:30:3000".replaceFirst("(\\d{2})0*$", "$1.000 +00:00");
OffsetDateTime date = OffsetDateTime.parse(fixedDateTimeString, FORMATTER);
正如您所看到的,在上一个示例中,我还在用作起点的字符串中保留了太多的零,并在附加偏移量的同一操作中删除了它们。结果是相同的, 2017-02-03T12:30:30Z

编辑: uuuuyyyy 表示格式模式字符串中的年份?由于年份始终为公元纪年(Anno Domini),因此两者都有效。 yyyy 表示纪元年份,并且位于纪元指示符的右侧(例如 AD 或 BC,格式模式字母 G)。 uuuu 是有符号的年份,其中年份 0 表示公元前 1 年,-1 表示公元前 2 年,依此类推。 this question: uuuu versus yyyy in DateTimeFormatter formatting pattern codes in Java? 中有更多内容。

关于java - 在 OffsetDateTime java 中解析没有偏移量的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47901893/

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