【问题标题】:Convert Time with Joda Time in Android to Local TimeZone将 Android 中的 Joda 时间转换为本地时区
【发布时间】:2016-04-19 17:34:12
【问题描述】:

我想在 android 中使用 Joda Time 库将时间转换为手机本地时区。

我的时间是 UTC,例如:2016-01-14 11:13:56

我现在的时间是:2016-01-14 12:13:56

当我运行这段代码时:

DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.UTC);

String time = String.valueOf(dt));

我得到:2016-01-14T10:13:56.000Z

当我运行这段代码时:

DateTime dt = DateTime.parse(usersResponse.lastUpdate, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));

String time = String.valueOf(dt));

我得到:2016-01-14T11:13:56.000+01:00

当我运行这段代码时:

DateTime dt = new DateTime(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate),
                DateTimeZone.forID("Europe/Rome"));

String time = String.valueOf(dt));

我得到:2016-01-14T11:13:56.000+01:00

但这是我应该收到的错误消息:2016-01-14T12:13:56.000+02:00

我是否缺少任何配置。这个问题是否与夏令时有关(从这里的一些问题中,我看到 Joda Time 可以管理)

我怎样才能获得设备本地时间的时间。

谢谢

【问题讨论】:

    标签: java android datetime timezone jodatime


    【解决方案1】:

    DateTime 对象表示自 unix 纪元以来的特定毫秒。这是您试图表示的时刻的规范表示。

    如果您在罗马、伦敦或纽约,根据您所称的毫秒打印出该 DateTime 对象就像特定毫秒的字符串别名。

    当你这样做时:

    String time = String.valueOf(dt));
    

    您只是在说“给我一个表示 DateTime 对象的毫秒的字符串表示形式,您没有指定该毫秒所需的 TimeZone 别名,因此它以 UTC 格式提供给您。

    这个:

        DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(usersResponse.lastUpdate)
    

    没有指定您希望格式化程序使用哪个时区,因此它将假定为 UTC。此后创建 DateTime 对象的所有用法都无关紧要,毫秒已设置。

    宁可这样做:

    DateTimeFormatter inputFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(Time_you_are_coming_from);
    DateTimeFormatter outputFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(time_your_are_converting_to);
    dt = inputFormatter.parseDateTime("2016-01-14 11:13:56");
    System.out.println(outputFormatter.print(dt));
    

    【讨论】:

    • 非常感谢,我不知道为什么我没有看到解决方案 :)
    • 不用担心:D。在迁移到 joda 并掌握它之前,我们使用 java 7 日期时间 api 有一些有趣的行为。
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2013-10-22
    • 2023-03-31
    • 2013-08-18
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多