【问题标题】:Millisecond time difference from Calendar too big与日历的毫秒时间差太大
【发布时间】:2011-11-29 16:12:41
【问题描述】:

我正在尝试比较 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 区域内的某个地方

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

【问题讨论】:

  • 你为什么不直接使用Calendar#setTime(...)
  • 你为什么不用obCal.setTime(DF.parse(date));

标签: java timestamp


【解决方案1】:

月份是从 0 开始的,所以当您执行 obCal.set(Calendar.MONTH, m); 时,您会提前 1 个月。

【讨论】:

  • 谢谢!我已经盯着这个问题看了好几个小时,现在已经解决了。
【解决方案2】:

您很可能错过了日历 API 将 MONTH 定义为 0 到 11 的范围,而您将其解析为 1 到 12。这会产生 30 * 86400 秒的差异...

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多