将日期转换为毫秒在Android(java)中给出不一致的结果

Shd*_*dus 4 java android date milliseconds

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

当我打印出milliseconds1和milliseconds2的值时,我会得到不同的结果!

我的代码如下:

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();
Run Code Online (Sandbox Code Playgroud)

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

jlo*_*rdo 9

您的问题的答案是:,这不是Java或Android中的错误.记录良好的行为.一个Calendar实例有超过年,月,日多个字段.您生成新的日历实例并仅更改这些字段,将所有其他字段保留为创建方式.如果连续两次运行程序,则秒和毫秒的平均时间也会发生变化.

来自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();
Run Code Online (Sandbox Code Playgroud)