伙计们。
我是使用 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/