【问题标题】:Android Joda Time - How to Load UTC from FileAndroid Joda Time - 如何从文件中加载 UTC
【发布时间】:2017-07-04 05:43:06
【问题描述】:

我正在使用 Joda Time。我想比较 2 个日期/时间 A 和 B 以确定 B 是否超过 A。

问题 - 当我登录 A 时,它不是 UTC。当我登录 B 时,它是 UTC。因此,比较是不真实的。

A - A UTC time loaded from a file
B -The "System Time" in UTC

代码:

A - DateTime csvTime = new DateTime( inArray[5] ) ; //inArray[x] is loaded from a file and has this format: 2017-02-10T01:09:00Z
B - new DateTime(DateTimeZone.UTC)

问题 - 我如何加载 inArray[5] 使其真正采用 UTC 并准确地与 B 进行比较?

提前致谢,是的,我已经查看了 100 篇关于此的帖子。我还没有找到一篇文章告诉我上面 A 的语法,如何在 UTC 内部存储外部 ISO 8601 格式日期。我玩过 TimeZone set default 来强制 Joda/JVMP 默认 TZ 但这让我不得不指定我不想做的 TimeZone。

【问题讨论】:

    标签: android datetime jodatime utc


    【解决方案1】:

    如果您的输入已经是 UTC(尾随“Z”),那么我建议您这样解析它:

    DateTime dt =
        ISODateTimeFormat.dateTimeNoMillis().withOffsetParsed().parseDateTime(
            "2017-02-10T01:09:00Z"
        );
    System.out.println(dt); // 2017-02-10T01:09:00.000Z
    

    否则,您可以通过 withZone(DateTimeZone.UTC) 将您的 A-DateTime 转换为 UTC。

    【讨论】:

    • 谢谢。那(dt)工作得很好。我很感激。最后一个问题...现在如何在我的 android 设置的本地时间/时区显示 dt ?
    • @FrankZappa 使用withZone(DateTimeZone.getDefault()) 怎么样?只要用户没有调整他/她设备上的时钟或系统区域,这将起作用。
    • 谢谢。我会试试的。你有序列化/反序列化包含 Joda 的 DateTime 字段的对象的经验吗?我正在使用 gson 进行序列化。我的序列化一直在工作,直到我将 java 日期更改为 Joda 的 DateTime ,然后反序列化崩溃了。所以我然后添加了谷歌的 DateTimeTypeConverter 来序列化/反序列化。它不再在序列化时崩溃,但在反序列化时似乎时间已经改变。有什么想法吗?
    • @FrankZappa 我对 Joda 对象的序列化没有特殊经验,但听说一些外部序列化 API(非标准 Java)在对 Java 序列化规范建模时存在问题。但是,特殊转换器通常会解决此类问题(如您报告的 Google 工具作为示例)。而且由于您在 Android 上工作,Proguard 也可能会妨碍您。无论如何,这个问题不适合评论格式。
    • 我听取了您的建议并创建了另一个帖子。我不相信这是序列化。请看这里的8小时时差stackoverflow.com/questions/42256267/…
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2014-07-31
    • 1970-01-01
    • 2021-03-18
    • 2013-10-22
    相关资源
    最近更新 更多