【问题标题】:JodaTime : Convert local to UTC ambiguityJodaTime:将本地转换为 UTC 歧义
【发布时间】:2013-05-24 11:19:58
【问题描述】:

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

【问题讨论】:

    标签: java date timezone jodatime utc


    【解决方案1】:

    根据convertLocalToUTC的javadoc

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

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

    【讨论】:

      【解决方案2】:

      convertLocalToUTC() 方法的角度来看。它只需要一个long 和一个boolean。它不知道您传递的时间是否为UTC。它假定您传递的是当地时间的long,并相应地进行调整。

      【讨论】:

        猜你喜欢
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        相关资源
        最近更新 更多