java - 我的乔达时区搞砸了

标签 java jodatime

伙计们。

我是使用 joda time api 的新手。这是我的问题。我的应用程序服务器部署在西部地区的某个地方,日期固定为特定时间,2015 年 2 月 6 日星期五 08:50:54 UTC 2015。

但是,我尝试使用 joda 时区将时区更改为我的国家/地区。但没有成功。我已经没有主意了。下面是我的代码:

java.util.Date dateIn = new java.util.Date(); 
            DateTime dateTimeUtc = new DateTime( dateIn, DateTimeZone.UTC );
            System.out.println("date time utc : " + dateTimeUtc);


            DateTimeZone timeZoneLos_Angeles = DateTimeZone.forID( "America/Los_Angeles" ); // Adjust time zone to United States.
            DateTime dateTimeLos_Angeles = dateTimeUtc.withZone( timeZoneLos_Angeles );
            System.out.println("los angeles date time : " + dateTimeLos_Angeles.toDate());

            DateTimeZone timeZoneMalaysia = DateTimeZone.forID( "Asia/Singapore" );
            DateTime dateTimeKL = dateTimeLos_Angeles.withZone( timeZoneMalaysia );
            System.out.println("KL date time : " + dateTimeKL.toDate());

            java.util.Date newDate = dateTimeKL.toDate();

            System.out.println("after convert to j.u.Date : " + newDate);

输出:

date time utc : 2015-02-06T08:58:29.127Z
los angeles date time : Fri Feb 06 16:58:29 SGT 2015
KL date time : Fri Feb 06 16:58:29 SGT 2015
after convert to j.u.Date : Fri Feb 06 16:58:29 SGT 2015

我不知道现在发生了什么。 joda 时间使用我的本地机器时间。 你们能解释一下这里发生了什么吗?我是否以错误的方式访问 joda 时间?或者是我的错误?

最佳答案

java.util.Date 基本上与 joda-time Instant 相同:通用时间尺度上的瞬时。它没有任何时区。它只是包裹在一个对象中的几毫秒。因此,当您在 java.util.Date 实例上调用 toString() 时,该对象会尝试使该毫秒数对您可读,并将其转换为可读日期使用 JVM 的默认时区:本例中为 SGT。

如果您想查看给定时区的日期,请打印 DateTime 实例本身(其中包含即时时区),而不是将其转换为日期(会丢失时区信息),或者使用配置了时区的 SimpleDateFormat,将 java.util.Date 显示为所需时区的字符串.

关于java - 我的乔达时区搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361962/

相关文章:

java - 计时器 - 如何使用 Joda Time 计算两个日期之间的差异?

java - 使用for循环输出由字符X组成的矩形

java - 为什么抽象类支持静态而实例 block 而接口(interface)不支持?

java - 如何将用户时区添加到 utc 日期

java - 在java中使用日期,并且仅使用日期

java - 使用 jodatime 查找剩余日期和时间

java - 使用 Joda Time 将 Unix 时间戳转换为字符串

java - Android RecyclerView适配器ImageButton问题

java - JPA:@ManyToOne 关系的默认列名映射

java - TreeMap节点分配后为空