【问题标题】:How to set custom TimeZone in Android如何在 Android 中设置自定义时区
【发布时间】:2012-08-20 14:39:18
【问题描述】:

在我的应用程序中,我根据用户的TimeZone 向用户显示一些信息。 我允许用户选择世界上不同的城市并获取所需的信息。默认情况下,我将使用

从他们的设备获取用户的时区
                `TimeZone myTZ = TimeZone.getDefault();`

一旦用户更改 TimeZone ,我会将其保存在首选项中。存储和检索首选项中的值没有问题。

When another TimeZone is selected I set that TimeZone as default TimeZone using

       `TimeZone.setDefault(TimeZone.getTimeZone("my_timezone"));`

当我在日志中打印TimeZone 时,我得到了TimeZone 值,因为我设置了它。但是当我在计算中使用TimeZone 时,我得到了以前的TimeZone 值。

所以我认为问题在于 TimeZone 没有改变,我希望用户将选定的 TimeZone 设置为他们设备中的默认 TimeZone。我该怎么做。我做错了什么?

被困在这三天。有什么建议可以摆脱这种情况吗?快速建议对我有很大帮助。提前致谢!!

【问题讨论】:

    标签: android timezone


    【解决方案1】:

    根据TimeZone.setDefault(...) 的文档-

    仅覆盖当前进程的默认时区。

    警告:避免使用此方法在您的 过程。该值可以随时清除或覆盖,这 可能导致意外行为。相反,手动提供自定义时间 根据需要进行分区。

    显然要通过代码更改时区,您必须使用 AlarmManager。见讨论here。

    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setTimeZone(timezone);
    

    需要在清单中设置此权限

    <uses-permission  android:name="android.permission.SET_TIME_ZONE"></uses-permission>
    

    【讨论】:

    • 对我来说仍然是同样的问题。时区不正确。值在某处发生变化。
    • 我接受这个答案是因为我们认为我们使用 setDefault() 设置的时区只会更改当前进程的时区...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2018-08-21
    • 2013-12-15
    • 2017-01-20
    相关资源
    最近更新 更多