【问题标题】:Android inconsistency when dates are stored as longs and the time zone is changed日期存储为 long 并且时区更改时的 Android 不一致
【发布时间】:2012-08-28 15:19:27
【问题描述】:

我有一个 Android 应用程序,仅供英国和爱尔兰人使用,并且没有计划在海外使用此应用程序。

在应用程序中,我存储各种事物的日期,虽然我不需要完整的时间戳,包括一天中的时间,但我只需要日期。

为了方便比较日期,我一直在创建日历对象并清除时间值,并使用其中的毫秒数存储在数据库中。

public Calendar clearCalTime(long l) {
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setTimeInMillis(l);
    cal.clear(Calendar.HOUR);
    cal.clear(Calendar.HOUR_OF_DAY);
    cal.clear(Calendar.MINUTE);
    cal.clear(Calendar.SECOND);
    cal.clear(Calendar.MILLISECOND);
    return cal;
}

问题是,如果用户更改时区,由于某些原因,日期会开始混乱,例如将内容保存到错误的日期。时区可以是任何东西,我无法控制用户设置的内容。

我尝试将时区设置为 UTC,但这也不起作用。有什么办法可以忽略时区?

【问题讨论】:

    标签: android datetime


    【解决方案1】:

    不。您将不得不设置 TimeZone 进出存储。

    您需要这样做:

    Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
    

    在您的代码中使其保持一致。

    看到这个 SO:Java.util.Calendar - milliseconds since Jan 1, 1970

    在处理复杂的日期/时间数学时,也可以使用Joda Time

    【讨论】:

    • 谢谢 - 我会继续搞乱时区,我在某些地方手动设置了它们。
    • 奇怪的是,当时区设置为 -x 时它似乎是正确的,但是当它设置为 +x 时,日期不正确......
    猜你喜欢
    • 2011-06-06
    • 2022-10-14
    • 2014-11-25
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多