使用 Joda 时间获取给定时区的当前上墙时间

2022-09-03 16:54:03

要求是简单地获取给定时区的当前上墙时间(包括正确的 DST 调整)。

SO中似乎有一些问题徘徊在这个问题上,但我似乎找不到一个直接的答案(在SO,Joda doco或谷歌搜索中),以一种低摩擦的方式获得墙壁时间。似乎使用给定的输入(当前UTC时间和所需的TZ),我应该能够从Joda Time库中链接几个方法来实现我想要的东西,但是在上述示例中似乎希望评估+处理应用程序代码中的偏移/转换 - 如果可能的话,我想避免这种情况,并且只是根据其可用的静态TZ规则集使用Jodas的最大努力。

出于这个问题的目的,让我们假设我不会使用任何其他第三方服务(基于网络的或其他二进制文件),而只是从JDK和JodaTime库中获得的内容。

任何指点赞赏。

更新:这实际上是代表我的失言。我根据请求经度计算了UTC偏移量,虽然这显然有效,但显然您仍然需要区域信息才能获得正确的DST调整。

double aucklandLatitude = 174.730423;
int utcOffset = (int) Math.round((aucklandLatitude * DateTimeConstants.HOURS_PER_DAY) / 360);
System.out.println("Offset: " + utcOffset);

DateTimeZone calculatedDateTimeZone = DateTimeZone.forOffsetHours(utcOffset);
System.out.println("Calculated DTZ: " + calculatedDateTimeZone);
System.out.println("Calculated Date: " + new DateTime(calculatedDateTimeZone));
System.out.println();
DateTimeZone aucklandDateTimeZone = DateTimeZone.forID("Pacific/Auckland");
System.out.println("Auckland DTZ: " +  aucklandDateTimeZone);
System.out.println("Auckland Date: " + new DateTime(aucklandDateTimeZone));

指纹

Offset: 12
Calculated DTZ: +12:00
Calculated Date: 2012-02-08T11:20:04.741+12:00

Auckland DTZ: Pacific/Auckland
Auckland Date: 2012-02-08T12:20:04.803+13:00

因此,在阳光明媚的新西兰奥克兰,我们是+12,但在DST期间是+13。

我的坏。尽管如此,感谢您的回答,让我看到了自己的错误。


答案 1

你有没有看过构造函数:DateTime

DateTime(DateTimeZone zone) 

这将构造一个 DateTime,表示指定时区中的当前时间。


答案 2

怎么样:

DateTime utc = new DateTime(DateTimeZone.UTC);
DateTimeZone tz = DateTimeZone.forID("America/Los_Angeles");
DateTime losAngelesDateTime = utc.toDateTime(tz);

推荐