【问题标题】:Using JodaTime in project for Australia在澳大利亚项目中使用 JodaTime
【发布时间】:2026-01-04 03:25:01
【问题描述】:

我对 Android 有点陌生,但听从了许多程序员的建议,在我的项目中使用 JodaTime 进行所有时间计算。但是我似乎无法使用 JodaTime 将 UTC 时间转换为澳大利亚时区。我应该为澳大利亚重新编译 JodaTime 吗?如果是这样,怎么做? 我尝试使用 DateTimeZone.getAvailableIds() 函数,但返回的数组没有列出任何澳大利亚时区。

有人能解释一下我需要做什么吗?不胜感激? 谢谢

【问题讨论】:

  • 您拥有哪个版本的 Joda Time - 它是专门针对 Android 的“精简”版本吗?应该有几个,比如“Australia/Melbourne”和“Australia/Sydney”。
  • 2.0 版本。它是直接从 SourgeForge 网站下载的。它只是那里列出的“标准”分发 ZIP 文件。我看到现在有 2.1 版。我去下载看看有什么不同。
  • 这真的不应该是问题。 getAvailableIds 返回的集合有多大?
  • 刚试了2.1版。给出一组不同的 AvailableIds。在每种情况下,它似乎都返回了 64 件商品。
  • 对不起。以前的评论不正确。它正在返回所有时区(其中 100 个)。我以前没有遇到过 Set 并且处理不正确。除了创建 DateTime 对象需要很长时间之外,我现在还有其他工作。我现在需要做的就是弄清楚如何修改提供程序以仅处理澳大利亚和 UTC 时区,一切都会好起来的。

标签: android timezone jodatime


【解决方案1】:

在回答您的最终评论时,如果您只想将时区过滤为以澳大利亚(或 UTC)开头的时区,您可以使用:

// Easier with Guava, but you might not want another dependency
List<DateTimeZone> zones = new ArrayList<DateTimeZone>();
for (String id : DateTimeZone.getAvailableIds()) {
    if (id.startsWith("Australia/")) {
        zones.add(DateTimeZone.forID(id));
    }
}
zones.add(DateTimeZone.UTC);

(显然,如果您只想要 ID,则需要将其设为 List&lt;String&gt; 并使用 zones.add(id)。)

【讨论】:

  • 你在安卓上使用Mobile Express Checkout Library吗?如果是的话,请帮助我question
  • 好的,先生。但是,非常感谢您通过评论回复。
  • 好的。这看起来像我想要做的。但该代码到底该去哪里。是需要进入 JodaTime 库还是我的应用程序的代码?如果在应用程序中,与创建 DateTime 对象有关吗?
  • @user91705:在你的应用程序中——但我不知道它会去哪里,恐怕我对你的应用程序一无所知。
  • 好的。谢谢乔恩。你从哪里得到那段代码?这会让我知道把它放在哪里吗?