Java日历将时间设置为UTC中前一天的上午12点

时间:2011-01-28 20:31:18

标签: java calendar utc

有人可以解释为什么或者这段代码是错误的吗?

// main
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(calendar.getTime());
calendar.add(Calendar.DATE, -1);
System.out.println(calendar.getTime());
calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println(calendar.getTime());

它产生:

Fri Jan 28 15:27:35 EST 2011
Thu Jan 27 15:27:35 EST 2011
Wed Jan 26 19:27:35 EST 2011

我错过了一些明显的东西吗?我希望能看到类似于2011年1月27日00:27:35 EST的东西

感谢。

3 个答案:

答案 0 :(得分:3)

您是在默认时区打印出来的,而不是UTC。虽然您的日历知道您感兴趣的时区,但java.util.Date返回的getTime()不会...而Date.toString()使用系统时区

鉴于您在主题中指定您希望在UTC时间上午12点,为什么您希望看到2011年1月27日星期四00:27:35? EST与UTC不同。

编辑:与往常一样,我只想指出Joda Time通常是一个很多更好的API,可用于Java中的日期/时间算法。你现在得到了正确的答案,但我仍然建议搬到Joda:)

答案 1 :(得分:2)

EST是UTC - 5小时,因此美国东部时间19:27对应于UTC时间00:27。这对我来说似乎合乎逻辑。 使用带有UTC语言环境的日期格式来显示日历,而不是使用默认语言环境。

答案 2 :(得分:0)

对于UTC计算(仅限),您可能会发现使用long更简单。

long time = System.currentTimeMillis();
// yesterday at 12:00:00.000 am.
long yesterday = (time / 86400000 - 1) * 86400000;