4

我正在尝试在 android 中使用日历,当我尝试将日期转换为毫秒时,我在不同的运行中得到不同的结果。

当我打印出毫秒1 和毫秒2 的值时,我会在不同的时间得到不同的结果!

我的代码如下:

Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

calendar1.set(1997, 9, 3);
calendar2.set(1997, 9, 01);

long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();

这是 Java(或 Android 的实现)中的错误还是类似的错误?

4

1 回答 1

9

您的问题的答案是:,这不是 Java 或 Android 中的错误。这是有据可查的行为。实例具有Calendar比 YEAR、MONTH 和 DATE 更多的字段。您生成新的日历实例并仅更改这些字段,而将所有其他字段保留为创建方式。如果你连续运行你的程序两次,那么秒和毫秒将同时发生变化。

来自JavaDoc

设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 保留其他日历字段的先前值。如果不需要,请先调用clear()

为了每次都打印相同的值,您需要这样做:

    Calendar calendar1 = Calendar.getInstance();
    Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT"));

    calendar1.clear();
    calendar1.set(1997, 9, 3);
    calendar2.clear();
    calendar2.set(1997, 9, 1);

    long milliseconds1 = calendar1.getTimeInMillis();
    long milliseconds2 = calendar2.getTimeInMillis();
于 2013-01-02T08:25:15.177 回答