与日历的毫秒时差太大了

时间:2011-11-29 16:12:41

标签: java timestamp

我正在尝试比较Java中的两毫秒值。一个来自日历,一个来自System.currentTimeMillis()。但是,日历中的值似乎总是远远大于System.currentTimeMillis()在正确时间的值。

为了构建日历,我正在解析dd/MM/yyyy HH:mm格式的日期字符串,并将它的替换部分放入日历中(为简洁起见省略了try-catch)。

Calendar obCal = null;

//Exception here shows invalid format
DateFormat DF = new SimpleDateFormat("dd/MM/yyyy HH:mm");
DF.parse(Date);

//Example string: 29/11/2011 16:30
String[] parts = Date.split("/");

obCal = Calendar.getInstance();
int Y = Integer.parseInt(parts[2].split(" ")[0]);
int m = Integer.parseInt(parts[1]);
int d = Integer.parseInt(parts[0]);
int H = Integer.parseInt(parts[2].split(" ")[1].split(":")[0]);
int M = Integer.parseInt(parts[2].split(" ")[1].split(":")[1]);

obCal.set(Calendar.YEAR, Y);
obCal.set(Calendar.MONTH, m);
obCal.set(Calendar.DAY_OF_MONTH, d);
obCal.set(Calendar.HOUR_OF_DAY, H);
obCal.set(Calendar.MINUTE, M);
obCal.set(Calendar.SECOND, 0);
obCal.set(Calendar.MILLISECOND, 0);

在此之后检查日历会显示我正在接收正确的日期和时间。然后,我从obCal.getTimeInMillis()获取自纪元以来的毫秒值,并将其存储为long

的秒数
long stamp = obCal.getTimeInMillis() / 1000L;

当我到达日期字符串所代表的时间,并将日历中的时间戳与时间戳System.currentTimeMillis()进行比较时,我发现前者的距离要大得多。当前时间与日历时间之间的差异(curTime-calTime)通常位于-2,500,000

区域的某个位置

可能导致这种情况的原因是什么? 感谢

2 个答案:

答案 0 :(得分:7)

月份从0开始,所以当你执行obCal.set(Calendar.MONTH, m);时,你会在1个月后离开。

答案 1 :(得分:0)

很可能你错过了Calendar API将MONTH定义为0到11的范围,而你将它解析为1到12.这使得30 * 86400的第二个差异......