gpt4 book ai didi

java - 带日历的时区

转载 作者:行者123 更新时间:2023-11-30 07:32:48 26 4
gpt4 key购买 nike

使用 UTC 时区时,我遇到了 Calendar 和 SimpleDateFormatter 的一些意外行为。看起来 SimpleDateFormatter 给出了正确的结果,但 Calendar 却没有。我不知道为什么。我使用以下代码通过日历生成日期:

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);

换言之,2012 年 3 月 5 日 00:00 UTC。
当我在本地 CST 时区打印这个时间时,我得到:

Mon Mar 05 06:00:00 CST 2012
This is odd because CST is UTC-6:00, so I was expecting Sunday March 4th, 2012 18:00 CST (i.e. 6 hours before midnight in the prior day). Instead I get 6 hours after UTC.

When I use a SimpleDateFormatter like so:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
df.parse("2012-03-05");

我得到了预期的“2012 年 3 月 4 日星期日 18:00 CST”,它早于 UTC 6 小时,即 UTC-6:00。

为什么我的结果是错误的?

最佳答案

Calendar.HOUR 以 12 小时格式设置小时,因此您不会将其设置为午夜,而是设置为中午 12 点。

改用 Calendar.HOUR_OF_DAY 或确保还设置 am/pm 值:

cal.set(Calendar.AM_PM, Calendar.AM);

关于java - 带日历的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35850249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com