【问题标题】:Android: Time stored in db is not the same as on phoneAndroid:存储在数据库中的时间与手机上的时间不同
【发布时间】:2012-03-25 07:55:48
【问题描述】:

我正在使用 System.currentTimeMillis();获取我的“修改”数据库字段的当前时间。我通过将其除以 1000 将其转换为 unix 纪元。 但是,即使手机/模拟器的日期和时间设置为真实时间,数据库中存储的值也比真实时间早 2 小时。

我在 GMT+2,但我不知道这是如何影响的。

不是 System.currentTimeMillis();获取当前时间设置的当前时间?

【问题讨论】:

    标签: java android


    【解决方案1】:

    改为使用 Calendar.getInstance(),如下所示:

    Calendar curTime = Calendar.getInstance();
    

    这个curTime 对象将是特定于语言环境的。

    来自 API,关于 currentTimeMillis()

    此方法不应用于测量超时或其他经过的时间测量,因为更改系统时间会影响结果。

    【讨论】:

      【解决方案2】:

      currentTimeMillis 不返回与时区相关的时间戳:

      当前时间与 1970 年 1 月 1 日午夜 UTC 之间的差异(以毫秒为单位)。

      但是,最好以 UTC 格式存储时间戳,并且包含时区偏移量。要显示“正确”时间,您可以使用SimpleDateFormat

      SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
      // set your Timezone; or use TimeZone.getDefault() for the device timezone
      df.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
      String time = df.format(new Date(timestamp));
      

      【讨论】:

        【解决方案3】:

        来自the documentation:

        "返回当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位"

        它为您提供时间,与您所在的时区无关。所以你应该自己计算正确的时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-18
          • 2012-05-21
          • 1970-01-01
          • 2014-09-03
          • 1970-01-01
          • 2012-09-13
          • 2016-08-31
          • 1970-01-01
          相关资源
          最近更新 更多