当日期存储为长并且时区更改时,Android不一致



我有一个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,但这也不起作用。有没有办法无视时区?

没有。您必须设置进出存储的时区。

你需要这样做:

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

以使其一致。

查看此SO:Java.util.Calendar-自1970年1月1日以来的毫秒

或者,在处理复杂的日期/时间数学时使用Joda Time。

最新更新