gpt4 book ai didi

java - 1582年10月15日之前的日历到日期的转换。公历到儒略历的切换

转载 作者:行者123 更新时间:2023-12-04 21:28:54 24 4
gpt4 key购买 nike

鉴于公历的开始日期是1582年10月15日,请考虑以下测试,并请帮助我了解会发生什么情况:

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
import org.junit.Test;

@Test
public void gregorianToDateConversion() {

GregorianCalendar calendar = null;
Date date = null;

calendar = new GregorianCalendar(1582, 9, 04);
date = calendar.getTime();
System.out.println("new GregorianCalendar(1582, 9, 4) -> calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date:" + date);

calendar = new GregorianCalendar(1582, 9, 05);
date = calendar.getTime();
System.out.println("\nnew GregorianCalendar(1582, 9, 5) -> calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date:" + date);

calendar = new GregorianCalendar(1582, 9, 14);
date = calendar.getTime();
System.out.println("\nnew GregorianCalendar(1582, 9, 14) -> calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date:" + date);

calendar = new GregorianCalendar(1582, 9, 15);
date = calendar.getTime();
System.out.println("\nnew GregorianCalendar(1582, 9, 15) -> calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date:" + date);

String dateToParse = null;

dateToParse = "1582-10-04";
System.out.println("\nString to parse: " + dateToParse);
calendar = parseDateTime(dateToParse);
if(calendar != null) {
date = calendar.getTime();
System.out.println("datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() -> \n calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date: " + date);
}

dateToParse = "1582-10-05";
System.out.println("\nString to parse: " + dateToParse);
calendar = parseDateTime(dateToParse);
if(calendar != null) {
date = calendar.getTime();
System.out.println("datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() -> \n calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date: " + date);
}

dateToParse = "1582-10-14";
System.out.println("\nString to parse: " + dateToParse);
calendar = parseDateTime(dateToParse);
if(calendar != null) {
date = calendar.getTime();
System.out.println("datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() -> \n calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date: " + date);
}

dateToParse = "1582-10-15";
System.out.println("\nString to parse: " + dateToParse);
calendar = parseDateTime(dateToParse);
if(calendar != null) {
date = calendar.getTime();
System.out.println("datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() -> \n calendar[DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("calendar.getTime() -> Date: " + date);
}
}
private GregorianCalendar parseDateTime(String s) {
DatatypeFactory datatypeFactory = null;
try {
datatypeFactory = DatatypeFactory.newInstance();
return datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

结果如下:
new GregorianCalendar(1582, 9, 4) -> calendar[DAY_OF_MONTH [4], MONTH [9], YEAR [1582]] **OK**
calendar.getTime() -> Date:Thu Oct 04 00:00:00 CET 1582 **OK**

new GregorianCalendar(1582, 9, 5) -> calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]] **+ 10 days ??**
calendar.getTime() -> Date:Fri Oct 15 00:00:00 CET 1582 **coherent with calendar**

new GregorianCalendar(1582, 9, 14) -> calendar[DAY_OF_MONTH [24], MONTH [9], YEAR [1582]] **+ 10 days ??**
calendar.getTime() -> Date:Sun Oct 24 00:00:00 CET 1582 **coherent with calendar**

new GregorianCalendar(1582, 9, 15) -> calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]] **OK**
calendar.getTime() -> Date:Fri Oct 15 00:00:00 CET 1582 **OK**

String to parse: 1582-10-04
datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() ->
calendar[DAY_OF_MONTH [4], MONTH [9], YEAR [1582]]
calendar.getTime() -> Date: Mon Sep 24 00:00:00 CET 1582 **Not coherent with calendar. Conversion to julian date?**

String to parse: 1582-10-05
datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() ->
calendar[DAY_OF_MONTH [5], MONTH [9], YEAR [1582]]
calendar.getTime() -> Date: Tue Sep 25 00:00:00 CET 1582 **Not coherent with calendar. Conversion to julian date?**

String to parse: 1582-10-14
datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() ->
calendar[DAY_OF_MONTH [14], MONTH [9], YEAR [1582]] **OK**
calendar.getTime() -> Date: Thu Oct 04 00:00:00 CET 1582 **Not coherent with calendar. Conversion to julian date?**

String to parse: 1582-10-15
datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar() ->
calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]] **OK**
calendar.getTime() -> Date: Fri Oct 15 00:00:00 CET 1582 **OK**

您能告诉我发生了什么吗?
非常感谢你。

编辑:
谢谢您,我已修正有关要解析的日期格式的错误:现在所有格式均为yyyy-MM-gg,并且不再引发任何异常。

现在,我尝试澄清我的债务。

是什么决定了我们是否在使用阳历公历?
通过总结:
java.util.GregorianCalendar表示1582年10月15日之前的儒略历,在该日期之后表示公历。这样对吗?
因此,这证明了新的GregorianCalendar(...)中的行为是正确的。
如果我做:
new GregorianCalendar(1582, 9, 4) 

我有
calendar[DAY_OF_MONTH [4], MONTH [9], YEAR [1582]]  

因为1582年10月4日存在于儒略历中,而我创建的日历代表了儒略历。
将此日历转换为日期,我们有:
Date:Thu Oct 04 00:00:00 CET 1582, consistent with Calendar.  

如果我做:
new GregorianCalendar(1582, 9, 5)   

我得到
calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]]  

因为10月5日在儒略历或阳历中都不存在。因此,GregorianCalendar构造函数创建的日期恰好是10月4日之后的1天,即公历的第一天,即10月15日。然后,新日期以公历系统表示。
我将具有相同的行为,创建一个新的日历,将日期从(1582,9,5)传递到(1582,9,14)。
在上面的示例中,转换后的java.util.Date再次与Calendar一致
Date:Fri Oct 15 00:00:00 CET 1582  

如果我做:
new GregorianCalendar(1582, 9, 15)  

我有
calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]]  

因为公历中存在10月15日,并且在此系统中表示新日期。
转换为日期的日历再次保持一致:
Date:Fri Oct 15 00:00:00 CET 1582  

这意味着GregorianCalendar构造函数假设我在日历系统中输入了在给定纪元内有效的日期:换句话说,假设我输入的日期在10月04日之前或等于10月04日,则我认为该日期是根据julian日历和日期在此系统中表示,如果我输入10月5日至10月14日之间的日期,它将计算从朱利安日历的结束日期(10月4日)到我输入的日期之间的天数,并将这些天加到开始日期的公历日期(10月15日),并在公历系统中表示新日期,如果我输入一个等于或小于10月15日的日期,则假定我输入的日期在公历中,并且新日期在此系统中表示。
这一切正确吗?
这不是多产的行为,对吗?如果日历是公制的公历,我希望将其初始化为
new GregorianCalendar(1582, 9, 5)  

我会得到
calendar[DAY_OF_MONTH [5], MONTH [9], YEAR [1582]]  

如果公历系统中不存在该日期,则也设置10月5日,如果公历日历的第一天是10天,则等于9月25日的儒略日(如果我没有记错的话)。
我该如何决定是否使用阳历公历?

解析一个字符串并通过XmlGregorianCalendar创建一个新的GregorianCalendar,此行为在我看来似乎有所不同。
解析“1582-10-04”,我得到
calendar[DAY_OF_MONTH [4], MONTH [9], YEAR [1582]] 

(与上面的示例相同)。但是有一个日期
Date: Mon Sep 24 00:00:00 CET 1582 

(我们这里有一个儒略日,对吗?但是在上面的示例中(GregorianCalendar是由其构造函数创建的),日期等于日历。为什么现在不同了?

解析字符串“1582-10-05”
calendar[DAY_OF_MONTH [5], MONTH [9], YEAR [1582]] 

(现在我们有一个公历,对吧?)
但是又一次不同的日期
Date: Tue Sep 25 00:00:00 CET 1582 (Julian Date? Why?)  

解析“1582-10-14”的行为相同
calendar[DAY_OF_MONTH [14], MONTH [9], YEAR [1582]]  
Date: Thu Oct 04 00:00:00 CET 1582

如果我们最终解析“1582-10-15”,那么我们回到格里高利时代广告就变得一致了:
calendar[DAY_OF_MONTH [15], MONTH [9], YEAR [1582]]  
Date: Fri Oct 15 00:00:00 CET 1582

您能帮助我了解所有这些行为吗?
非常感谢你。

编辑2:

谢谢您的回答,如果还有疑问,请给我。
我尝试了以下代码:
GregorianCalendar proleptic = new GregorianCalendar();
proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
proleptic.set(Calendar.DAY_OF_MONTH, 5);
proleptic.set(Calendar.MONTH, 9);
proleptic.set(Calendar.YEAR, 1582);
System.out.println("proleptic [DAY_OF_MONTH ["+proleptic.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+proleptic.get(Calendar.MONTH)+"], YEAR ["+proleptic.get(Calendar.YEAR)+"]");
Date prolepticDate = proleptic.getTime();
System.out.println("prolepticDate ["+prolepticDate+"]");

输出为:
proleptic [DAY_OF_MONTH [5], MONTH [9], YEAR [1582]
prolepticDate [Tue Sep 25 00:24:07 CET 1582]

现在,我的日历中的DAY_OF_MONTH与我设置的日历保持一致,所以我认为这是一种多事的行为,对吗?
但是我再次问为什么通过getTime()方法获得的日期不代表同一天,而是代表10天。
再次感谢。

编辑3:

对我来说,这个问题更为清楚,但并不完全。
我没有详细了解从GregorianCalendar到Date的转换是什么逻辑,以及为什么一个多用的Gregorian日历和一个传统的日历(分别使用与DAY,MONTH和YEAR相同的参数构造)并不总是表示同一时刻。
我做了一些进一步的测试。
GregorianCalendar proleptic = null;
GregorianCalendar calendar = null;
Date date = null;

// ---- JULIAN PERIOD ----
proleptic = new GregorianCalendar();
proleptic.clear();
proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
proleptic.set(Calendar.DAY_OF_MONTH, 5);
proleptic.set(Calendar.MONTH, Calendar.FEBRUARY);
proleptic.set(Calendar.YEAR, 1582);
System.out.println("proleptic_calendar_5Feb1582 [DAY_OF_MONTH ["+proleptic.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+proleptic.get(Calendar.MONTH)+"], YEAR ["+proleptic.get(Calendar.YEAR)+"]");
date = proleptic.getTime();
System.out.println("date_5Feb1582 from proleptic ["+date+"]");

calendar = new GregorianCalendar(1582, 1, 5);
date = calendar.getTime();
System.out.println("new GregorianCalendar(1582, 1, 5) -> [DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("new GregorianCalendar(1582, 1, 5) .getTime() -> Date:" + date);

System.out.println("proleptic_calendar_5Feb1582 in millis ["+proleptic.getTimeInMillis()+"], new GregorianCalendar(1582, 1, 5) in millis ["+calendar.getTimeInMillis()+"], millis are equal ["+ (proleptic.getTimeInMillis() == calendar.getTimeInMillis()) +"]");
//--------

System.out.println("\n");

// ---- transition period ----
proleptic = new GregorianCalendar();
proleptic.clear();
proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
proleptic.set(Calendar.DAY_OF_MONTH, 8);
proleptic.set(Calendar.MONTH, Calendar.OCTOBER);
proleptic.set(Calendar.YEAR, 1582);
System.out.println("proleptic_calendar_8Oct1582 [DAY_OF_MONTH ["+proleptic.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+proleptic.get(Calendar.MONTH)+"], YEAR ["+proleptic.get(Calendar.YEAR)+"]");
date = proleptic.getTime();
System.out.println("date_5Oct1582 from proleptic ["+date+"]");

calendar = new GregorianCalendar(1582, 9, 8);
date = calendar.getTime();
System.out.println("new GregorianCalendar(1582, 9, 8) -> [DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("new GregorianCalendar(1582, 9, 8) .getTime() -> Date:" + date);

System.out.println("proleptic_calendar_8Oct1582 in millis ["+proleptic.getTimeInMillis()+"], new GregorianCalendar(1582, 9, 8) in millis ["+calendar.getTimeInMillis()+"], millis are equal ["+ (proleptic.getTimeInMillis() == calendar.getTimeInMillis()) +"]");
//--------

System.out.println("\n");

// ---- GREGORIAN PERIOD ----
proleptic = new GregorianCalendar();
proleptic.clear();
proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
proleptic.set(Calendar.DAY_OF_MONTH, 5);
proleptic.set(Calendar.MONTH, Calendar.DECEMBER);
proleptic.set(Calendar.YEAR, 1582);
System.out.println("proleptic_calendar_5Dec1582 [DAY_OF_MONTH ["+proleptic.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+proleptic.get(Calendar.MONTH)+"], YEAR ["+proleptic.get(Calendar.YEAR)+"]");
date = proleptic.getTime();
System.out.println("date_5Dec1582 from proleptic ["+date+"]");

calendar = new GregorianCalendar(1582, 11, 5);
date = calendar.getTime();
System.out.println("new GregorianCalendar(1582, 11, 5) -> [DAY_OF_MONTH ["+calendar.get(Calendar.DAY_OF_MONTH)+"], MONTH ["+calendar.get(Calendar.MONTH)+"], YEAR ["+calendar.get(Calendar.YEAR)+"]]");
System.out.println("new GregorianCalendar(1582, 11, 5) .getTime() -> Date:" + date);

System.out.println("proleptic_calendar_5Dec1582 in millis ["+proleptic.getTimeInMillis()+"], new GregorianCalendar(1582, 11, 5) in millis ["+calendar.getTimeInMillis()+"], millis are equal ["+ (proleptic.getTimeInMillis() == calendar.getTimeInMillis()) +"]");
//--------

输出为:
proleptic_calendar_5Feb1582 [DAY_OF_MONTH [5], MONTH [1], YEAR [1582]
date_5Feb1582 from proleptic [Fri Jan 26 00:00:00 CET 1582]
new GregorianCalendar(1582, 1, 5) -> [DAY_OF_MONTH [5], MONTH [1], YEAR [1582]]
new GregorianCalendar(1582, 1, 5) .getTime() -> Date:Mon Feb 05 00:00:00 CET 1582
proleptic_calendar_5Feb1582 in millis [-12241069200000], new GregorianCalendar(1582, 1, 5) in millis [-12240205200000], millis are equal [false]

proleptic_calendar_8Oct1582 [DAY_OF_MONTH [8], MONTH [9], YEAR [1582]
date_5Oct1582 from proleptic [Fri Sep 28 00:00:00 CET 1582]
new GregorianCalendar(1582, 9, 8) -> [DAY_OF_MONTH [18], MONTH [9], YEAR [1582]]
new GregorianCalendar(1582, 9, 8) .getTime() -> Date:Mon Oct 18 00:00:00 CET 1582
proleptic_calendar_8Oct1582 in millis [-12219901200000], new GregorianCalendar(1582, 9, 8) in millis [-12219037200000], millis are equal [false]

proleptic_calendar_5Dec1582 [DAY_OF_MONTH [5], MONTH [11], YEAR [1582]
date_5Dec1582 from proleptic [Sun Dec 05 00:00:00 CET 1582]
new GregorianCalendar(1582, 11, 5) -> [DAY_OF_MONTH [5], MONTH [11], YEAR [1582]]
new GregorianCalendar(1582, 11, 5) .getTime() -> Date:Sun Dec 05 00:00:00 CET 1582
proleptic_calendar_5Dec1582 in millis [-12214890000000], new GregorianCalendar(1582, 11, 5) in millis [-12214890000000], millis are equal [true]

第一个测试(1582年2月5日)指的是儒略历的时期,第二个测试(1582年10月8日)指的是过渡时期,第三个测试(1582年12月5日)指的是公历时期。
然后,我想注意以下几点:

朱利安时代
  • 多久的公历似乎代表了所需的日期
  • 如@Meno Hochschild所述,将获取的日期转换为儒略日期(-10天)
  • 传统的公历似乎也代表了所需的日期...
  • ,但获取的日期与上一个
  • 不同
  • 实际上,两个公历代表两个不同的时刻,请参见
  • 的毫秒值

    过渡期
  • 多久的公历似乎代表了所需的日期
  • 再次将获取的日期转换为儒略日期(-10天)
  • 传统的公历似乎是用公历儒略历表示的日期(10月8日)转换为公历(10月8日= 4天,而儒略历的最大日期为10月4日)= 3天的转换结果然后公历MIN DATE = 15 + 3 = 10月18日(这是一个假设)
  • 这次获得的日期似乎代表上述传统公历的日期(这次没有转换为朱利安日期吗?)
  • 两个公历再次代表两个不同的时刻,请参见
  • 的毫秒值

    公历
  • 多历的阳历表示所需的日期
  • 获得的Date表示相同的日期
  • 传统的公历代表所需的日期
  • 获得的Date表示相同的日期
  • 两个公历表示相同的时间点,相同的毫秒数

  • 您能帮我一一解释所有这些结果吗?

    谢谢。

    最佳答案

    方法newXMLGregorianCalendar(s)必须使用格式为“yyyy-MM-dd”的字符串进行输入,该字符串在月中使用两位数字。但是,您已经定义了字符串“1582-10-4”和“1582-10-5”(而不是“1582-10-04”和“1582-10-05”)。

    我已经测试了替代品,并且可以使用。

    请记住,XMLGregorianCalendar非常严格,并且还根据ISO-8601中的标准约定使用多用公历。也就是说,它甚至在1582年之前都使用了公历leap年规则。这解释了您的陈述“与日历不一致。转换为儒略日吗?”。例如:

    教皇已删除日期1582-10-04(旧儒略历)后的10天,因此在此之后,日期1582-10-15紧随其后是新的公历。在阳历公历中,日期1582-10-14的定义很明确,对应于1582-10-15之前的一天,因此(历史朱利安)日期1582-10-04。

    编辑OP后更新:

    您的问题的简单答案“是什么决定我们是否使用了阳历公历?”是:您决定。

    详细信息:如果使用XMLGregorianCalendar,则使用多历公历。

    如果使用java.util.GregorianCalendar,则默认情况下将日期1582-10-15选择为公历的第一天。所有以前的日子都被认为是儒略历。但是,您可以覆盖默认切换日期。为此,您只需使用适当的参数调用setGregorianChange(Date)方法即可。 new Date(Long.MIN_VALUE)的参数设置多久的公历,而new Date(Long.MAX_VALUE)的参数设置多久的儒略历。

    同样重要的是要注意

    a)大多数国家在1582-10-15都没有改用公历(只有主要的天主教国家),

    b)历史日期还由其他因素决定,例如不同的年初(这使得JDK中的完整julian-gregorian-calendar实现完全不足-当前没有提供支持的库)。

    在EDIT-2之后更新:

    输出proleptic [DAY_OF_MONTH [5], MONTH [9], YEAR [1582]是预期的,并保留了多功的公历中定义的输入(在1582-10-15之前的10天,向后应用公历leap年规则)。

    输出的prolepticDate [Tue Sep 25 00:24:07 CET 1582]是一个完全不同的故事。但是,如果您记得确实在toString()上调用了java.util.Date方法,这是可以理解的。 该方法在内部实例化一个新的公历日历对象,默认开关为1582-10-15。 Date -object不知道(也没有内部状态)设置公历更改的日期,因此其toString() -method仅应用默认值。最后,只是将日历对象以Date.toString()的特定格式重新计算/重新格式化为朱利安日历表示形式。即:1582-09-25(切换前十天)。

    由于@VGR的评论而更新:

    我的测试证明,例如,对于多义日期1582-10-05,自unix-epoch以来,XMLGregorianCalendar和新GregorianCalendar的特殊构造在毫秒中产生的时间相同,请参见:

    String s = "1582-10-05";
    DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
    GregorianCalendar xml = datatypeFactory.newXMLGregorianCalendar(s).toGregorianCalendar();

    GregorianCalendar proleptic = new GregorianCalendar();
    proleptic.clear(); // very important for proper comparison to reset time part to zero
    proleptic.setGregorianChange(new Date(Long.MIN_VALUE));
    proleptic.set(Calendar.DAY_OF_MONTH, 5);
    proleptic.set(Calendar.MONTH, Calendar.OCTOBER);
    proleptic.set(Calendar.YEAR, 1582);

    boolean isEqual = (xml.getTimeInMillis() == proleptic.getTimeInMillis());

    System.out.println("XML-millisSinceEpoch: " + xml.getTimeInMillis());
    System.out.println("Proleptic-millisSinceEpoch: " + proleptic.getTimeInMillis());
    System.out.println("XML==Proleptic (1582-10-05): " + isEqual);
    System.out.println(
    "proleptic [DAY_OF_MONTH [" + proleptic.get(Calendar.DAY_OF_MONTH) + "], MONTH ["
    + proleptic.get(Calendar.MONTH) + "], YEAR [" + proleptic.get(Calendar.YEAR) + "]"
    );
    System.out.println("Date.toString() [" + proleptic.getTime() + "]");

    输出:
    XML-millisSinceEpoch: -12220160400000
    Proleptic-millisSinceEpoch: -12220160400000
    XML==Proleptic (1582-10-05): true
    proleptic [DAY_OF_MONTH [5], MONTH [9], YEAR [1582]
    Date.toString() [Tue Sep 25 00:00:00 CET 1582]

    关于java - 1582年10月15日之前的日历到日期的转换。公历到儒略历的切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23457470/

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