gpt4 book ai didi

Java 日期时间转换为给定时区

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

我有一个格式为 Tue, 30 Apr 2019 16:00:00 +0800 的日期时间,它是 RFC 2822 格式的日期

我需要将其转换为 DateTime 中给定的时区,即 +0800

所以如果我总结一下,

DateGiven = Tue, 30 Apr 2019 16:00:00 +0800
DateWanted = 01-05-2019 00:00:00

如何在 Java 中实现此目的?我已经尝试过下面的代码,但它给出的时间比当前时间少 08 小时,即

30-04-2019 08:00:00

我尝试过的代码

String pattern = "EEE, dd MMM yyyy HH:mm:ss Z";
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date startDate = format.parse(programmeDetails.get("startdate").toString());

//Local time zone
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");

//Time in GMT
Date dttt= dateFormatLocal.parse( dateFormatGmt.format(startDate) );

最佳答案

您的方法是正确的,但只需使用 java-8 日期时间 API 模块,首先使用输入格式表示创建 DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z");

然后使用OffsetDateTime解析带有偏移量的字符串

OffsetDateTime dateTime = OffsetDateTime.parse("Tue, 30 Apr 2019 16:00:00 +0800",formatter);

并调用toLocalDateTime()方法获取本地时间

LocalDateTime localDateTime = dateTime.toLocalDateTime();  //2019-04-30T16:00

如果您希望再次以特定格式输出,您可以使用 DateTimeFormatter

localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)   //2019-04-30T16:00:00

注意: 正如 @Ole V.V 在评论中指出的那样,将输入字符串解析为 util.Date 后您正在获取 UTC 时间

The class Date represents a specific instant in time, with millisecond precision.

现在,如果您将解析的日期时间转换为 UTC,您将得到 2019-04-30T08:00Z 且没有偏移量,因此您可以使用 withOffsetSameInstant将其转换为任何特定时区

dateTime.withOffsetSameInstant(ZoneOffset.UTC)

关于Java 日期时间转换为给定时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830202/

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