gpt4 book ai didi

java - 为什么 iso8601 LocalDatetime 仅适用于 UTC 而不适用于本地日期时间?

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

我正在尝试将 iso8601 日期的两种格式转换为 localDateTime,但此操作似乎不起作用。

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class DemoIsoDate {
public static void main(String[] args) {
Instant instant = Instant.parse("2016-08-18T06:17:10.225Z");
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
System.out.println("LocalDateTime in epoch milli : " + ldt.toEpochSecond(ZoneOffset.UTC) * 1000);

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
.withZone(ZoneOffset.UTC);

System.out.println(LocalDateTime.parse("2015-07-17T17:47:18+08:00", dtf));
}
}

这是堆栈跟踪:

LocalDateTime : 1471501030000 Exception in thread "main"
java.time.format.DateTimeParseException: Text '2015-07-17T17:47:18+08:00' could not be parsed at index 16
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at ca.qc.alfred.jms.reader.service.DemoIsoDate.main(DemoIsoDate.java:24)

这是我使用的模式问题还是什么?

谢谢!

最佳答案

Java LocalDateTime 类不接受时区作为参数,您需要传递 ISO-8601 字符串:https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

您需要将字符串转换为 LocalDateTime,然后将其转换为 ZonedDateTime示例:

LocalDateTime ldt = LocalDateTime.parse("2019-07-30T23:21");
ZoneId zoneId = ZoneId.of("America/Sao_Paulo");

ZonedDateTime zdt = ZonedDateTime.of(ldt, zoneId);

关于java - 为什么 iso8601 LocalDatetime 仅适用于 UTC 而不适用于本地日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57282089/

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