9

我正在尝试使用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
4

2 回答 2

6

根据 javadocconvertLocalToUTC

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

方法不假设或验证传递的日期是否存在UTC,它始终将传递的日期视为本地并转换为UTC. 您的程序输出是正确的。

于 2013-05-29T09:20:56.913 回答
2

convertLocalToUTC()方法的角度来看。它只需要 along和 a boolean。它不知道您通过的时间是否长短UTC。它假定您传递的long是当地时间并相应地调整它。

于 2013-05-29T09:16:20.603 回答