【问题标题】:new Date() returns local time instead of UTCnew Date() 返回本地时间而不是 UTC
【发布时间】:2014-09-08 07:20:27
【问题描述】:

如果我跑了

SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.ENGLISH).format(new Date()) 

在时区设置为 IST(GMT + 05:30) 的 android 设备模拟器中的应用程序中,它给了我当地时间。如果我不断更改手机设置中的时区并运行它,我将不断获得适当的本地时间。

Date() 应该返回 UTC 时间,而不是特定于时区的本地时间。为什么没有发生?

如果我运行,我可以获得 UTC(实际上是 GMT)时间

select datetime('now') 

在应用内的 SQLite 数据库中。

【问题讨论】:

    标签: android


    【解决方案1】:

    SimpleDateFormat 默认为当前时区。

    在格式化程序上调用setTimeZone(),使其格式化为其他时区。

    Date 的内部表示是 UTC。

    来自documentation

    每个 SimpleDateFormat 实例都有一个 TimeZone。这是因为它被要求格式化 Date 的实例,它表示 UTC 中的绝对时间。也就是说,Date 不携带时区信息。默认情况下,SimpleDateFormat 将使用系统的默认时区。

    【讨论】:

    • 您认为可以在不应用时区的情况下进行类似的格式化吗?希望将 UTC 时间作为文本存储在 SQLite 数据库中。
    • 您可以调用formatter.setTimeZone(TimeZone.getTimeZone("UTC"))将其设置为UTC。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多