2013-01-02 128 views
4

结果不一致我试图在android中使用日历,当我尝试将日期转换为毫秒时,我在不同的运行中得到不同的结果。转换日期为毫秒给Android(java)

当我打印出毫秒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的实现)或错误之类的东西?

+0

可以请你提供你提的关于 –

+0

我也不是很小心的是,不同的输出。我只是想看看我能否得到任何工作。谢谢,不过。 – Shdus

+0

当然。我跑了一次,得到875693736417.第二次,我得到875693771063.第三次,我得到875694175657.等。 – Shdus

回答

8

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

JavaDoc

设置值日历年,月,和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(); 
+0

唉。谢谢!我完全错过了。 – Shdus

+1

@Shdus总是仔细阅读javadoc,如果你看到你没有想到的行为 –

+0

@Shdus - 并且在你发布SO问题之前做* :-) –