gpt4 book ai didi

java - 时区转换

转载 作者:IT老高 更新时间:2023-10-28 20:47:26 27 4
gpt4 key购买 nike

我需要在我的项目中从一个时区转换到另一个时区。

我能够从当前时区转换到另一个时区,但不能从另一个时区转换到另一个时区。

例如,我在印度,我可以使用 Date d=new Date(); 将其从印度转换为美国,并将其分配给日历对象并设置时区。

但是,我不能从不同的时区到另一个时区执行此操作。例如,我在印度,但在将时区从美国转换为英国时遇到问题。

最佳答案

tl;博士

ZonedDateTime.now( ZoneId.of( "Pacific/Auckland" ))              // Current moment in a particular time zone.
.withZoneSameInstant( ZoneId.of( "Asia/Kolkata" )) // Same moment adjusted into another time zone.

详情

java.util.Date 类没有指定时区,但它的 toString 实现混淆了 JVM 当前的默认时区。

避免使用 java.util.Date 和 .Calendar

这是避免与 Java 捆绑在一起的臭名昭著的麻烦 java.util.Date、.Calendar 和 SimpleDateFormat 类的众多原因之一。避开他们。而是使用:

java.time

Java 8 及更高版本具有 java.time package内置。这个包的灵感来自 Joda-Time .虽然它们有一些相似之处和类名,但它们是不同的;每个都有其他人缺乏的功能。一个显着的区别是 java.time 避免使用构造函数,而是使用静态实例化方法。两个框架都由同一个人领导,Stephen Colbourne .

大部分 java.time 功能已在 ThreeTen-Backport 中向后移植到 Java 6 和 7。项目。在 ThreeTenABP 中进一步适应 Android项目。

在这个问题的情况下,它们以相同的方式工作。指定时区,调用now方法来获取当前时刻,然后基于旧的不可变实例创建一个新实例来调整时区。

注意两个不同的时区类别。一个是命名时区,包括夏令时和其他此类异常的所有规则以及与 UTC 的偏移量,而另一个只是偏移量。

ZoneId zoneMontréal = ZoneId.of("America/Montreal"); 
ZonedDateTime nowMontréal = ZonedDateTime.now ( zoneMontréal );

ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
ZonedDateTime nowTokyo = nowMontréal.withZoneSameInstant( zoneTokyo );

ZonedDateTime nowUtc = nowMontréal.withZoneSameInstant( ZoneOffset.UTC );

乔达时间

Joda-Time 2.3 中的一些示例代码如下。在 StackOveflow 中搜索更多示例和讨论。

DateTimeZone timeZoneLondon = DateTimeZone.forID( "Europe/London" );
DateTimeZone timeZoneKolkata = DateTimeZone.forID( "Asia/Kolkata" );
DateTimeZone timeZoneNewYork = DateTimeZone.forID( "America/New_York" );

DateTime nowLondon = DateTime.now( timeZoneLondon ); // Assign a time zone rather than rely on implicit default time zone.
DateTime nowKolkata = nowLondon.withZone( timeZoneKolkata );
DateTime nowNewYork = nowLondon.withZone( timeZoneNewYork );
DateTime nowUtc = nowLondon.withZone( DateTimeZone.UTC ); // Built-in constant for UTC.

我们在宇宙时间线上有四个相同时刻的表示。


实际上,java.util.Date确实 有一个隐藏在 its source code 内的时区.但是出于大多数实际目的,该类(class)忽略了该时区。因此,作为简写,人们常说 j.u.Date 没有指定时区。令人困惑?是的。避免 j.u.Date 的困惑,使用 Joda-Time 和/或 java.time。

关于java - 时区转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567923/

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