JodaTime:将本地转换为UTC歧义

时间:2013-05-29 09:08:32

标签: java date timezone jodatime utc

我正在尝试使用Joda Time将本地日期转换为UTC。我使用的代码如下所示,效果很好。

Date localDate = new Date();
System.out.println("Local Date : " + localDate);

DateTimeZone tz = DateTimeZone.getDefault();
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false));
System.out.println("UTC Date : " + utcDate);

Output :  
Local Date : Wed May 29 11:54:46 EEST 2013
UTC Date : Wed May 29 08:54:46 EEST 2013

但是,如果我将UTC日期作为参数发送到DateTimeZone.convertLocalToUTC()方法,它也会将小时数减少3。 但是,由于它是UTC日期,我希望它不会再次转换日期。这是一个错误还是我错过了什么?

Date localDate = new Date();
System.out.println("Local Date : " + localDate);

DateTimeZone tz = DateTimeZone.getDefault();
Date utcDate = new Date(tz.convertLocalToUTC(localDate.getTime(), false));
System.out.println("UTC Date : " + utcDate);

Date utcDate2 = new Date(tz.convertLocalToUTC(utcDate.getTime(), false));
System.out.println("UTC Date 2 : " + utcDate2);

Output : 
Local Date : Wed May 29 11:54:46 EEST 2013
UTC Date : Wed May 29 08:54:46 EEST 2013
UTC Date 2 : Wed May 29 05:54:46 EEST 2013

2 个答案:

答案 0 :(得分:6)

根据convertLocalToUTC

的javadoc
  

将本地时刻转换为具有相同本地的标准UTC时刻   时间。执行计算后使用此转换   计算是使用一个简单的局部区域完成的。

方法没有假设或验证通过日期是否在UTC,它始终将传递日期视为本地日期并转换为UTC。你的程序输出是正确的。

答案 1 :(得分:2)

convertLocalToUTC()方法的角度来看它。它只需要longboolean。它没有任何知识,你传递它的时间长度是UTC。它假设您传递的是本地时间的long并相应地进行调整。