3

鉴于此代码...

 String date = "11:00 AM";

 SimpleDateFormat sdf = new SimpleDateFormat("h:mm a");

 sdf.setTimeZone(TimeZone.getTimeZone("US/Eastern")); // --> should be GMT-4

 TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

 Date parse = sdf.parse(date); // -- gives Thu Jan 01 16:00:00 GMT 1970

为什么日期解析给我 16:00 而不是 15:00?

4

3 回答 3

1

您不能java.util.Date仅用于存储时间。它将分配 1970 年,这在某些情况下是不正确的。我建议使用org.joda.time.LocalTime它。

于 2013-03-12T11:17:11.890 回答
0

还要考虑日光节约。这应该给你你所期望的

sdf.setTimeZone(TimeZone.getTimeZone("EST5EDT"));

于 2013-03-12T11:03:58.103 回答
0

如果您在默认情况下不提供任何日期部分,则会为其分配默认值Epoche standard date(01 Jan 1970 00:00 HoursEpoche standard time并将其作为标准来衡量所有与时间相关的计算作为基准时间)。

getTime()java.util.Date 类的方法返回给定date(including time also)和之间的总毫秒数Epoche standard( 01 Jan 1970 00:00 Hours)。尽管您没有使用getTime()方法,但在这里无关紧要。所以很简单,你得到了那个时间。根据格林威治标准时间,这是正确的。

我认为它会帮助你。

于 2013-03-12T12:47:07.083 回答