java - Long 到 XMLGregorianCalendar 并返回到 Long

标签 java date jaxb

我正在尝试将毫秒时间戳转换为 XMLGregorianCalendar 并返回,但我似乎得到了错误的结果。难道我做错了什么?看来我的日子越来越好。

    // Time stamp   01-Jan-0001 00:00:00.000
    Long ts = -62135740800000L;
    System.out.println(ts);
    System.out.println(new Date(ts)); // Sat Jan 01 00:00:00 PST 1 .. Cool!

    // to Gregorian Calendar
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTimeInMillis(ts);

    // to XML Gregorian Calendar
    XMLGregorianCalendar xc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);

    // back to GC
    GregorianCalendar gc2 = xc.toGregorianCalendar();

    // to Timestamp
    Long newTs = gc2.getTimeInMillis();
    System.out.println(newTs);    //  -62135568000000  .. uh?
    System.out.println(new Date(newTs));  // Mon Jan 03 00:00:00 PST 1  .. where did the extra days come from?

最佳答案

有趣 - 它适用于低至(大约)-10000000000000L(和正值)的值,但更大的负值会变得不一致。

如果打印出gcxcgc2,就可以看出问题出在哪里(从XMLGregorianCalendar到GregorianCalendar

gc:  java.util.GregorianCalendar[time=-62135740800000 ... DAY_OF_WEEK=7
xc:  0001-01-01T08:00:00.000Z
gc2: java.util.GregorianCalendar[time=? ... DAY_OF_WEEK=5

如果打印出 xc 的字段,您将得到 1,1,1。

    System.out.println(xc.getYear());
    System.out.println(xc.getMonth());
    System.out.println(xc.getDay());

对于 gc2,您得到 1,0,1(与 xc 匹配,因为月份在 GregorianCalendar 中从零开始)

    System.out.println(gc2.get(gc2.YEAR));
    System.out.println(gc2.get(gc2.MONTH));
    System.out.println(gc2.get(gc2.DAY_OF_MONTH));

但是,添加这 3 个 println 调用会改变打印出 gc2 的输出! - gc2time=? 输出更改为 time=-62135568000000 - 因此通过查询 GregorianCalendar< 触发了一些计算对象; areFieldsSet 属性也从 false 更改为 true

两个 GregorianCalendar 的时区不同,但这并不能解释错误,即使您设置了明确的 TimeZone 和 Locale,该错误仍然存​​在。

关于java - Long 到 XMLGregorianCalendar 并返回到 Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867130/

相关文章:

java - 如何在 HBase 中检索行的最后修改时间戳?

java - Jelastic 中的 Websockets : DeploymentException: The HTTP response from the server did not permit the HTTP upgrade to WebSocket

Java JAXB XJC代码生成表单XSD模式问题

asp.net-mvc - 如何在 MVC 5 Razor 中设置日期格式

java - 如何确定日期是否在 Java 中的两个日期之间?

web-services - 这将导致无限深的 XML

java - JAXB 不生成所有元素类

java - 为什么在使用 setLayout() 时无法更改 JFRame 背景的颜色?

java - 字节 z[] = 新字节[5]; - 这是什么意思?

java - 如何在java中将时间设置为日期对象