Java 如何在xmlgregoriancalendar中打印日期9999-99-99?
需要使用XMLGregoriaCalendar类型将日期精确打印为“9999-99-99”。 当我通过“9999-99-99”时,我得到了错误的输出:10007-07-08。如何获得与9999-99-99完全相同的输出Java 如何在xmlgregoriancalendar中打印日期9999-99-99?,java,xmlgregoriancalendar,Java,Xmlgregoriancalendar,需要使用XMLGregoriaCalendar类型将日期精确打印为“9999-99-99”。 当我通过“9999-99-99”时,我得到了错误的输出:10007-07-08。如何获得与9999-99-99完全相同的输出 import java.util.GregorianCalendar; import javax.xml.datatype.DatatypeFactory; public class XMLGregorianCalendar { public static void ma
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
public class XMLGregorianCalendar {
public static void main(String[] args) {
/* Create Date Object */
//Date date = new Date();
javax.xml.datatype.XMLGregorianCalendar xmlDate = null;
//GregorianCalendar gc = new GregorianCalendar(2001,12,12);
GregorianCalendar gc = new GregorianCalendar(9999,99,99);
// gc.setTime(date);
try{
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("XMLGregorianCalendar :- " + xmlDate);
}
}
不要
类用于XML文档的日期和/或时间。假设这也是您的目的,您不能将9999-99-99
放在那里。根据XML规则,这不是一个有效的日期。引用XML模式第2部分:数据类型第二版,附录D ISO 8601日期和时间格式:
- M——表示时间元素“月”中使用的数字。MM格式的两个数字的值可以是1到12
- D——表示时间元素“天”中使用的数字。DD格式中的两位数字的值范围为1到28,如果月份值为 等于2,如果月份值等于2且年份为闰年,则为1到29 年份,如果月份值等于4、6、9或11,则为1到30;如果月份值等于4、6、9或11,则为1到31 月份值等于1、3、5、7、8、10或12
9999-99-99
用于XML文档以外的其他内容,我认为您根本不应该使用XMLGregorianCalendar
。没有上下文,我不敢提出其他选择
java.time我说“是……用于XML文档”。XML文档中的日期和时间源于ISO 8601格式,并且非常接近,因此我们通常可以使用java.time中的类,这是现代java日期和时间API,而不是XMLGregorianCalendar
,并且仍然可以从这些类的toString
方法中获得正确的语法。因此,对于有效日期,考虑使用Java.Time2的现代<代码> LoalDead < /C> >而不是旧的<代码> XMLGRGORICORANDANAR
你不能
XMLGregorianCalendar
对有效日期进行了限制,因此无法打印9999-99-99
在你的代码中发生的是,GregoriaCalendar
默认地、令人困惑地将日期修改为有效日期。例如:
GregorianCalendar gc = new GregorianCalendar(9999,99,99);
System.out.println(gc.getTime());
在我的电脑上,我得到:
7月8日星期日00:00:00 CEST 10007
当给出无效的月份和日期时,GregorianCalendar
只会将月份和日期计算到接下来的年份中。由于99个月比8年多一点,我们在1999年1月之后结束了8年多的时间,由于99天,我们又多了3个月。这就是您传递给XMLGregorianCalendar
的日期,它解释了您得到的输出
链接
- 解释如何使用java.time
XMLGregorianCalendar
不会接受它。