Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在xmlgregoriancalendar中打印日期9999-99-99?_Java_Xmlgregoriancalendar - Fatal编程技术网

Java 如何在xmlgregoriancalendar中打印日期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

需要使用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 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
我已经断章取义了,但我认为我们应该理解XML文档中的日期必须是有效的日期。9999-99-99不是有效日期,因为没有月份99,也没有月份有99天

如果您想将
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

但是为什么呢。。。。。99不是有效月份,也不是任何月份的有效日期。不要使用日历,只使用字符串格式,或使用12-31作为任何类型的“最大”日期的月日。这不是一个有效的日期,所以
XMLGregorianCalendar
不会接受它。