首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与日历的毫秒时间差太大

与日历的毫秒时间差太大
EN

Stack Overflow用户
提问于 2011-11-30 00:12:41
回答 2查看 862关注 0票数 1

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

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

代码语言:javascript
复制
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格式的秒数

代码语言:javascript
复制
long stamp = obCal.getTimeInMillis() / 1000L;

当我到达由日期字符串表示的时间,并将日历中的时间戳与时间戳System.currentTimeMillis()进行比较时,我发现前者要大得多。当前时间和日历时间(curTime-calTime)之间的差值通常在-2,500,000范围内

这可能是什么原因造成的?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-30 00:16:57

月份是从0开始的,所以当你做obCal.set(Calendar.MONTH, m);时,你就差了1个月。

票数 7
EN

Stack Overflow用户

发布于 2011-11-30 00:20:05

您很可能错过了Calendar API将月份定义在0到11的范围内,而您将其解析为1到12。这造成了30 * 86400秒的差异……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8313997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档