【问题标题】:Android timezone discrepancyAndroid时区差异
【发布时间】:2026-02-06 10:30:01
【问题描述】:

我写了一个简单的java程序

System.out.println(TimeZone.getDefault().getID()); // printing Asia/Calcutta

Android 文件中的同一行代码:

System.out.println(TimeZone.getDefault().getID()); //printing America/New_York

我的默认时区是亚洲/加尔各答,为什么会这样?
请帮忙。

【问题讨论】:

    标签: java android timezone


    【解决方案1】:

    在 Java 中 TimeZone.getDefault() 是这样初始化的:

    1. 查找系统属性“user.timezone”(在此属性设置为“Asia/Kolkata”的情况下启动您的应用程序始终是一个很好的解决方法)。

    2. 如果不存在,请查看“user.country”和“java.home”并使用本机方法访问平台区域信息(因此您应该真正检查您的 android-OS-时区配置)。

    3. 如果仍然不存在,则退回到 GMT

    更新:

    对于 Android(这不是真正的 Java),您还可以检查 this other SO-post,其中的答案提到了系统属性 System.getProperty("persist.sys.timezone");。您可以尝试为您打印此属性并点击那里的给定链接。

    【讨论】:

    • user.timezone 和 user.country 如何查看这些属性。
    • @ParitoshAhuja 查看System.getProperty("user.timezone");(通常产生null,除非您已使用此属性明确启动应用程序),但您的主要任务应该是检查您的操作系统设置的时区。
    • 我不想硬编码值,我想获取特定于该位置的时区,然后使用它。
    • @ParitoshAhuja 请记住,在许多重要情况下,一个给定位置有多个时区(例如:美国、俄罗斯等)。
    【解决方案2】:

    您可以随时使用:

    TimeZone tz = Calendar.getInstance().getTimeZone();
    

    【讨论】:

    • 我试过了,但输出和 Timezone.getDefault() 一样。