【问题标题】:Reading string timestamp in UTC as UTC time using DateTime class joda time library使用 DateTime 类 joda 时间库将 UTC 中的字符串时间戳读取为 UTC 时间
【发布时间】:2016-10-11 14:44:18
【问题描述】:

我在字符串中有一个时间戳,它在 UTC 时区,我想在 UTC 时区使用 joda 时间库中的 DateTime 来读取它。

例子:

String utcTs = "2016-06-01T14:46:22.001Z";

当我尝试低于 stmt。时,DateTime 正在读取它并转换为应用程序正在运行的服务器时区!!

DateTime dtUtcTs = new DateTime(utcTs);

有没有办法可以强制 DateTime 将字符串时间戳读取为 UTC?

我的应用程序服务器在 CST,当使用 SOP stmt 打印日期时,如下所示,我观察的是 CST 时间而不是 UTC!!

System.out.println(dtUtcTs) ==> 为我提供运行应用程序的服务器中的日期!!

非常感谢!!

import org.joda.time.DateTime;

public class TestClass {

public static void main(String[] args) {

String utcTs = "2016-06-01T14:46:22.001Z";
DateTime dtUtcTs = new DateTime(utcTs);

System.out.println(dtUtcTs)

}
}

下面是我看到的输出,我的应用服务器是在 CST 区域

2016-06-01T09:46:22.001-05:00

使用 joda time 2.9.1 版

【问题讨论】:

标签: java datetime jodatime


【解决方案1】:

您可以只使用采用DateTimeZoneDateTime 构造函数的重载:

DateTime dtUtcTs = new DateTime(utcTs, DateTimeZone.UTC);

另一种选择是使用DateTimeFormatter,这样您就可以准确地指定您期望的格式以及您想要的时区。

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2016-06-01T14:46:22.001Z";
        DateTime dt = ISODateTimeFormat.dateTime()
            .withZone(DateTimeZone.UTC)
            .parseDateTime(text);
        System.out.println(dt);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2011-05-01
    • 2015-04-02
    相关资源
    最近更新 更多