【问题标题】:How do I convert a String in a different timezone to UTC using Joda-Time如何使用 Joda-Time 将不同时区的字符串转换为 UTC
【发布时间】:2011-10-18 12:33:38
【问题描述】:

我设法将不同时区中的有效日期字符串转换为UTC,如下所示。

String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT);
DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00");
//date is 2000-01-01 00:00:00 -03:00
DateTime date =    DATETIME_FORMATTER.withZone(dateTimeZone).parseDateTime("2000-01-01 00:00:00"));
System.out.println("Current date is: " + date.toString());
//now convert to UTC
DateTime convertedDate = date.toDateTime(DateTimeZone.UTC);
System.out.println("Converted date: " + date.toString());

结果是

Current date is: 2000-01-01T00:00:00.000-03:00
Converted date: 2000-01-01T03:00:00.000Z

有没有更短/更好的方法来做到这一点?我希望最终日期是 Joda-Time DateTime 对象。

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    您可以使用withZone() 转换任何DateTime 的时区。如果输入字符串没有指定时区偏移量,那么您必须照常添加它,因此您的代码相当优化。

    【讨论】:

      【解决方案2】:

      对示例代码的一项改进可能是将硬编码的“-3:00”偏移量替换为时区名称。这将允许 Joda-Time 对任何可能的Daylight Saving Time (DST) 进行调整。请参阅DateTimeZone.forID() 的文档。

      这个:

      DateTimeZone dateTimeZone = DateTimeZone.forID("America/Sao_Paulo");
      

      而不是这个:

      DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00");
      

      时区列表(可能已过时,请阅读说明):
      http://joda-time.sourceforge.net/timezones.html

      【讨论】:

        猜你喜欢
        • 2020-06-24
        • 2013-10-22
        • 2011-02-12
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 2020-07-21
        • 2018-02-04
        相关资源
        最近更新 更多