如何使用DateTimeZone在Java中

我一直在尝试将服务器的日期和时间转换为用户的一个用下面的代码如何使用DateTimeZone在Java中

@Test 

public void playingWithJodaTime() {

LocalDateTime localDateTime = new LocalDateTime();

System.out.println("server localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.getDefault()).toDate());

System.out.println("user's localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.forID("Asia/Jakarta"))

.toDate());

}

打印结果

server localDateTime : Tue Dec 17 00:04:29 SGT 2013 

user's localDateTime : Tue Dec 17 01:04:29 SGT 2013

但打印的结果是不就像我期望的那样,因为服务器时区是(UTC+08:00) Kuala Lumpur, Singapore而用户的是(UTC+07:00) Bangkok, Hanoi, Jakarta

我在这里做错了什么?

回答:

您正在将DateTime转换为java Date(为什么?)。
java.util.Date使用默认JVM的时区
因此,您错过了此转换的时区。

此示例按预期工作:

LocalDateTime localDateTime = new LocalDateTime(); 

System.out.println("server localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.getDefault()));

System.out.println("user's localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.forID("Asia/Jakarta")));

,如果你想乔达日期时间转换成别的东西,然后将其转换为Calendar

LocalDateTime localDateTime = new LocalDateTime(); 

System.out.println("server localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.getDefault()).toGregorianCalendar());

System.out.println("user's localDateTime : "

+ localDateTime.toDateTime(DateTimeZone.forID("Asia/Jakarta")).toGregorianCalendar());

回答:

一个LocalDateTime代表日期时间没有时间区。

通过调用toDateTime(DateTimeZone)您丰富LocalDateTime与所提供的时区获得DateTime具有相同的日期和时间与原始LocalDateTime但与所提供的时区相关。请注意,调用toDateTime时不转换,因为原始本地日期时间没有关联的时区。

在服务器上:

  1. 服务器本地日期时间是Tue Dec 17 00:04:29 2013
  2. 您将UTC+08:00与时区关联。
  3. 使用toDate().toString()将其转换为默认时区+08:00(或SGT)中的表示,即Tue Dec 17 00:04:29 SGT 2013。转换是一种身份,因为关联的时区是SGT

在用户:

  1. 用户具有本地日期时间Tue Dec 17 00:04:29 2013
  2. 你一个UTC+07:00时区相关联。
  3. 随着toDate().toString()你转换成表示在默认时区+08:00(或SGT),所以时间是Tue Dec 17 01:04:29 SGT 2013。新加坡和雅加达之间的时差有一小时一小时,因此雅加达午夜时分在新加坡凌晨1点。

回答:

该错误是使用toDate()。为什么?通过说toDate(),您可以将LocalDateTime转换为时区无关的java.util.Date。但是,您隐式地使用j.u.Date中的toString()方法,它使用您的默认时区,因此在这两种情况下您都会得到相同的表示形式。

解决方案只是省略toDate()的调用。 JodaTime对象有更好的toString() - 紧跟ISO标准的实现,并将按照您指定的方式在不同的时区打印结果。

以上是 如何使用DateTimeZone在Java中 的全部内容, 来源链接: utcz.com/qa/258429.html

回到顶部