有人可以解释为什么或者这段代码是错误的吗?
// 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的东西
感谢。
答案 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;