[英]my joda time zone messup
伙计们
我在使用joda时间api的新手。 所以这是我的问题。 Ive应用服务器部署在西部地区的某个地方,日期固定为特定时间,UTC 2015年2月6日星期五08:50:54。
但是,我尝试使用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
我不知道现在怎么回事。 乔达时间正在使用我的本地机器时间。 你们能解释一下这里发生了什么吗? 我是否以错误的方式访问了乔达时间。 还是我的错误?
java.util.Date
与joda-time Instant
基本上是同一件事:通用时间尺度上的一个瞬间。 没有任何时区。 包裹到一个对象中仅需几毫秒。 因此,当您在java.util.Date
实例上调用toString()
时,此对象将尝试使您可以读取此毫秒数,并在这种情况下使用JVM的默认时区将其转换为可读日期:SGT。
如果你想看到的日期在给定的时区,然后打印DateTime
实例本身(其中包含一个时刻和时区),而不是将其转化为一个日期(它失去时区信息),或使用SimpleDateFormat
与配置您想要将java.util.Date
显示为所需时区java.util.Date
的字符串的时区。
Joda Time提供了Java日期和时间类的质量替代。 该设计允许使用多个日历系统,同时仍提供一个简单的API。 将Joda DateTime对象从一个时区转换为另一个时区非常容易,并且可以节省大量的代码行。 请参阅下面的方法。
public static Date convertJodaTimezone(LocalDateTime date, String srcTz, String destTz) {
DateTime srcDateTime = date.toDateTime(DateTimeZone.forID(srcTz));
DateTime dstDateTime = srcDateTime.withZone(DateTimeZone.forID(destTz));
return dstDateTime.toLocalDateTime().toDateTime().toDate();
}
由于Joda Time具有自己的用于存储Date和Calendar对象的类,因此DateTime类具有其自己的toDate()方法,用于将其转换为java.util.Date。
有关更多示例,请检查此链接
我重用了您的代码并进行了一些更改。 带注释的行是先前的实现,因此您可以将差异与新的实现进行比较。
Date dateIn = new 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 );
DateTime dateTimeLos_Angeles = dateTimeUtc.withZone(timeZoneLos_Angeles);
//System.out.println("los angeles date time : " + dateTimeLos_Angeles.toDate());
System.out.println("los angeles date time : " + dateTimeLos_Angeles.toLocalDateTime().toDate());
DateTimeZone timeZoneMalaysia = DateTimeZone.forID( "Asia/Singapore" );
DateTime dateTimeKL = dateTimeUtc.withZone(timeZoneMalaysia);
//System.out.println("KL date time : " + dateTimeKL.toDate());
System.out.println("KL date time : " + dateTimeKL.toLocalDateTime().toDate());
//Date newDate = dateTimeKL.toDate();
Date newDate = dateTimeKL.toLocalDateTime().toDate();
System.out.println("after convert to j.u.Date : " + newDate);
希望这个对您有用。 如果您可以进一步优化此代码,那就太好了。 干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.