java.util.Calendar没有报告正确的timeInMillis

时间:2009-12-13 12:18:25

标签: java calendar

findCalendarStart: time into Calendar: 1260575897

findCalendarStart: set hour : 13

findCalendarStart: after hour : 1249775897

findCalendarStart: after hour string: Thu Jan 15 11:09:35 UTC 1970

findCalendarStart: set minutes  : 13

findCalendarStart: after minutes: 1250015897

findCalendarStart: what calendar returns: 1250015897

我在日历中放置一个日期(通过从今天开始的毫秒传递来初始化)。日历已正确初始化。在第一次计算中,我将一天中的小时更改为13.此时,startCalTime.set(Calendar.HOUR_OF_DAY,((new Integer(m.group(1))。intValue())* 2)-1);

我正在通过正确的小时值和分钟,因为我在记录器中看到它们。在我从今天的Date对象改变一天中的小时后,有什么可能导致日历出现这样的奇怪日期?

更多代码:

Calendar startCalTime = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
Date d = new Date(creationTime);
startCalTime.setTime(d);       
 startCalTime.getTimeInMillis();

.. ..正则表达式

if(m.find()){
//SET HOUR OF DAY
_logger.warning("set hour 1 : " + new Integer((new Integer(m.group(1)).intValue())-1));                         startCalTime.set(Calendar.HOUR_OF_DAY, new Integer(m.group(1)).intValue()-1 );
_logger.warning("after hour 1:  " + new Long(startCalTime.getTime().getTime()));
_logger.warning("after hour 1 string:  " + startCalTime.getTime().toString());  
//SET MINUTE
_logger.warning("set minutes 1 : " + new Integer(m.group(2).toString()));
startCalTime.set(Calendar.MINUTE, new Integer(m.group(2)).intValue());
_logger.warning("after minutes 1:  " + new Long(startCalTime.getTime().getTime()));}

谢谢,

culov

3 个答案:

答案 0 :(得分:2)

让我们看看你如何初始化你的约会。我怀疑,自从纪元开始以来,你传递它而不是几毫秒 - 这个(秒,而不是毫秒)是定义Unix时间戳的方式。 Java使用毫秒来获得更好的粒度。

答案 1 :(得分:2)

Calendar startCalTime = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
Date d = new Date(creationTime);

那里发生了什么? startCalTimecreationTime似乎没有关联,我认为它们应该是?

同样为了获得更好的性能/内存占用,请尽可能避免使用new Integer/Long并改为使用Long/Integer.valueOf()

答案 2 :(得分:1)

您日历中的那些时间看起来不正确。如果那些应该是以毫秒为单位的时间,则126 .....表示只有350小时的时间,这看起来将近40年。

原因似乎是您的初始化并未真正将日历设置为今天的日期。最初的日期似乎只是这个时代的几个小时。

请发布更多代码,我们可以为您解决。