我正在尝试比较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
可能导致这种情况的原因是什么? 感谢
答案 0 :(得分:7)
月份从0开始,所以当你执行obCal.set(Calendar.MONTH, m);
时,你会在1个月后离开。
答案 1 :(得分:0)
很可能你错过了Calendar API将MONTH定义为0到11的范围,而你将它解析为1到12.这使得30 * 86400的第二个差异......