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



要求只是获得给定时区的当前壁时间(包括正确的夏令时调整)。

《SO》中似乎有一些问题围绕着这个问题,但我似乎找不到一个简单的答案(在《SO》、《Joda doco》或谷歌搜索中)。似乎有了给定的输入(当前UTC时间和所需的TZ),我应该能够从Joda时间库中链接几个方法来实现我想要的目标,但在所述示例中似乎有一种评估+处理应用程序代码中的偏移/转换的愿望-如果可能的话,我想避免这种情况,只需根据其可用的一组静态TZ规则尽最大努力使用Jodas。

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

感谢任何指点。

更新:这实际上是我的失态。我根据请求的经度计算了UTC偏移量,虽然这很有效,但显然你仍然需要区域信息来获得正确的夏令时调整。。

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,但为+13。

我的坏。尽管如此,还是感谢你的回答,让我明白了自己的错误。

您看过DateTime构造函数吗:

DateTime(DateTimeZone zone) 

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

怎么样:

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

清洁方法

我发现以下是最干净的方法。

DateTime currentTime = DateTime.now( DateTimeZone.UTC );

这将获得UTC的当前时间,但此值可以转换为另一个DateTimeZone,也可以用不同的DateTimeZone替换DateTimeZone.UTC

使用系统时区

如果你想将其设置为系统时区,你可以使用这个:

DateTime currentTime = DateTime.now( DateTimeZone.getDefault() );

相关内容

  • 没有找到相关文章

最新更新