使用SimpleDateFormat进行解析时,日期对象的毫秒数不正确
Date locally=new SimpleDateFormat("H:mm").parse("03:00");
本地毫秒为3600000但真实结果必须为3 * 60 * 60 * 1000 = 10800000
答案 0 :(得分:0)
将像“03:00”这样的无时区信息解析为Date
这样的全局类型始终与时区相关。在您的情况下,解析使用系统的默认时区,显然有两个小时的额外偏移,因此您将本地时间减少两个小时,从而导致UTC时间戳为1970-01-01T01:00Z。
似乎您希望将输入解释为持续时间。虽然Date
- 对象自然不是持续时间,但您可能会稍微滥用Date
- 这样输入:
SimpleDateFormat sdf = new SimpleDateFormat("H:mm");
sdf.setTimeZone(TimeZone.getTimeZone("GMT")); // interprete input in UTC (zero offset)
Date d = sdf.parse("03:00"); // timestamp equivalent to 1970-01-01T03:00Z
long durationInMillis = d.getTime(); // 10800000 ms relative to UNIX epoch