2

我正在使用以下 SimpleDateFormat

    DateFormat dateFormat = new SimpleDateFormat("dd/MMMMM/yyyy:HH:mm:ss.SSSSS");

然后读入我的时间戳,其中 timeStamp 是这样的字符串 29/May/2013:09:12:06.80652 而 this.timestamp 是 Date

    this.timestamp = dateFormat.parse(timeStamp);

我不明白为什么,当我去输出时间戳并将其用于时间戳比较时,时间会改变 - 鉴于上面的日期,我的输出是

    Timestamp before dateFormat: 29/May/2013:09:12:06.80625
    Timestamp after dateFormat: Wed May 29 09:13:26 EDT 2013

我不关心 EDT 和其他格式,我无法理解的是时间是如何从 9:12:06 到 9:13:26。

谢谢!

4

3 回答 3

4

您的格式以微秒为毫秒,因此您的 80625 以分钟和秒为单位进行转换(1min20sec = 80000ms)。

您应该截断微秒并刷新 3 个最低有效数字。

这将起作用:

DateFormat oDateFormat = new SimpleDateFormat("dd/MMMMM/yyyy:HH:mm:ss.SSS");
String sDate = "29/May/2013:09:12:06.80625";
long lMicroseconds;

// Computing milliseconds from microseconds since it the number of digits can change
lMicroseconds = Long.valueOf(sDate.substring(sDate.indexOf('.') + 1,sDate.length()));
sDate = sDate.substring(0,sDate.indexOf('.')) + "." + (lMicroseconds / 1000);

System.out.println(oDateFormat.parse(sDate));
于 2013-05-29T14:40:06.913 回答
1

您忘了考虑毫秒,而 80625 毫秒或多或少是 80 秒,或 1 分 20 秒。

9:12:06 + 1:20 => 9:13:26

如果你想处理它们,你可以看看Calendarand TimeUnitAPI。

于 2013-05-29T14:33:53.443 回答
0

80625 正好多 1 分 20 秒。所以这就是你得到改变的方式,它只是增加了毫秒。

于 2013-05-29T14:33:26.370 回答