gpt4 book ai didi

Java 日期时间 一天的开始和结束,没有任何时区信息

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

我有两个字符串作为 startDate 和 endDate。它们的值例如:

startDate="2019-09-29T06:00:00.000Z"
endDate="2019-10-06T05:59:59.999Z"

现在让我们假设这些时间以山地时间作为 startDate 的一天的开始和 endDate 的一天的结束。但由于这些是字符串,我怎样才能让程序理解这些可以转换为山区本地时间,例如:

startDate="2019-09-29T00:00:00.000Z"
endDate="2019-10-05T11:59:59.999Z"

并且时区是动态的。我可以从东部时间或任何其他时区获取时间戳字符串。
更新
我意识到我应该输入更多信息。
所以我放入的山地时间就是一个例子。它可以来自东部时间或任何其他时区。此方法知道的唯一事实是 st​​artDate 是某个时区一天的开始,而 endDate 是该时区一天的结束。我知道“Z”是 UTC 时间,但找出哪个时区在一天的开始 (startDate) 和一天的结束 (endDate) 生成 UTC 时间并转换回相应的本地时间,是我面临的挑战我正面临着。

最佳答案

最后的Z是时区信息,意思是offset 00:00 来自 UTC ,又名 Zero,又名 Zulu,所以首先将字符串解析为存储日期、时间和 Z 时区的类型。

使用 Java 8 Time API,则为 Instant , OffsetDateTime ,或ZonedDateTime .
如果您的输入始终以 Z 结尾,而不是其他偏移量,请使用 Instant

然后,您可以转换为所需的时区,对于美国山区时间,该时区称为美国/丹佛

示例

String startDate = "2019-09-29T06:00:00.000Z";
String endDate = "2019-10-06T05:59:59.999Z";
ZoneId zone = ZoneId.of("America/Denver");

System.out.println(Instant.parse(startDate).atZone(zone));
System.out.println(OffsetDateTime.parse(startDate).atZoneSameInstant(zone));
System.out.println(ZonedDateTime.parse(startDate).withZoneSameInstant(zone));

System.out.println(Instant.parse(endDate).atZone(zone));
System.out.println(OffsetDateTime.parse(endDate).atZoneSameInstant(zone));
System.out.println(ZonedDateTime.parse(endDate).withZoneSameInstant(zone));

输出

2019-09-29T00:00-06:00[America/Denver]
2019-09-29T00:00-06:00[America/Denver]
2019-09-29T00:00-06:00[America/Denver]
2019-10-05T23:59:59.999-06:00[America/Denver]
2019-10-05T23:59:59.999-06:00[America/Denver]
2019-10-05T23:59:59.999-06:00[America/Denver]

如果您不想在转换后保留时区,可以通过调用 toLocalDateTime() 将其删除。 ,例如

System.out.println(Instant.parse(endDate).atZone(zone).toLocalDateTime());

输出

2019-10-05T23:59:59.999

请注意它末尾没有 Z

关于Java 日期时间 一天的开始和结束,没有任何时区信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812729/

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