Android SimpleDateFormat不解析小时数

时间:2014-08-02 10:01:17

标签: android simpledateformat

使用SimpleDateFormat进行解析时,日期对象的毫秒数不正确

Date locally=new SimpleDateFormat("H:mm").parse("03:00");

本地毫秒为3600000但真实结果必须为3 * 60 * 60 * 1000 = 10800000

1 个答案:

答案 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