gpt4 book ai didi

java - 日历设置 YEAR 问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:22:25 25 4
gpt4 key购买 nike

我尝试了以下代码:

Calendar c1 = Calendar.getInstance();
c1.set(Calendar.YEAR, 0);
c1.set(Calendar.DAY_OF_YEAR, 1);
Date d1 = c1.getTime();

Calendar c2 = Calendar.getInstance();
c2.setTime(d1);
c2.set(Calendar.YEAR, 2001);
c2.set(Calendar.DAY_OF_YEAR, 1);
System.out.println(c2.getTime().toString());

Calendar c3 = Calendar.getInstance();
c3.set(Calendar.YEAR, 2000);
c3.set(Calendar.DAY_OF_YEAR, 1);
Date d2 = c3.getTime();

Calendar c4 = Calendar.getInstance();
c4.setTime(d2);
c4.set(Calendar.YEAR, 2001);
c4.set(Calendar.DAY_OF_YEAR, 1);
System.out.println(c4.getTime().toString());

结果是:

Wed Jan 01 23:47:00 CET 2001
Mon Jan 01 23:47:00 CET 2001

怎么了?我不应该以这种方式使用 Calendar 来设置 YEAR 吗?

最佳答案

年份与时代有关。通过将年份设置为小于或等于 0,日历会通过切换纪元(从 AD 到 BC 或从 BC 到 AD)自动更正这一点。这种行为在其他领域更为人所知。例如。如果您将月份设置为负数,则年份会相应减少。

这些更正不是单独进行的,而是一次全部进行的,通常是在您调用 getTime() 以读出结果日期时。

Calendar c1 = Calendar.getInstance(); // August  16th, 2012 AD
c1.set(Calendar.YEAR, 0); // August 16th, 0 AD
c1.set(Calendar.DAY_OF_YEAR, 1); // January 1st, 0 AD
Date d1 = c1.getTime(); // January 1st, 1 BC (corrected)

Calendar c2 = Calendar.getInstance();
c2.setTime(d1);
c2.set(Calendar.YEAR, 2001); // January 1st, 2001 BC
c2.set(Calendar.DAY_OF_YEAR, 1);
System.out.println(c2.getTime()); // prints "Wed Jan 01 05:35:00 CET 2001"
// because 01/01/2001 BC was a Wednesday

因此,不是将年份设置为 2001,而是必须将其设置为 -2000(因为 0 年根本不存在)。或者您可以明确设置纪元:

c2.set(Calendar.ERA, GregorianCalendar.AD);

解决此“错误”的另一种方法是在设置完整日期之前读取时间:

Calendar c1 = Calendar.getInstance(); // August  16th, 2012 AD
c1.set(Calendar.YEAR, 0); // August 16th, 0 AD
c1.set(Calendar.DAY_OF_YEAR, 1); // January 1st, 0 AD
c1.set(Calendar.YEAR, 2001); // January 1st, 2001 AD
System.out.println(c1.getTime()); // prints the expected date

要输出日期的纪元,您可以在 SimpleDateFormat 的模式中使用“G”:

new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy G").format(c2.getTime())
// "Wed Jan 01 05:35:00 CET 2001 BC"

关于java - 日历设置 YEAR 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8263220/

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