gpt4 book ai didi

java - 设置 xs :datetime type from java setter method omits milliseconds part of timestamp value

转载 作者:行者123 更新时间:2023-12-04 04:47:04 27 4
gpt4 key购买 nike

我已经使用 JAXB 从 xsd 模式生成了 java 模式对象。

我要做的是使用 java 模式对象 setter 方法设置 xml 标记的值,然后编码 java 对象。不过,在生成的最终 xml 中,我看到为 xs:datetime 类型生成的时间戳没有毫秒。

我期待看到像“2013-06-28T01:20:50.000 -04:00”这样的日期,我得到的只是“2013-06-28T01:20:50-” 04:00"没有毫秒。

二传手电话

obj.setTransactionDateTime(getTimestamp("2013-06-28 01:20:50"));

获取时间戳方法

public Calendar getTimestamp(String dateStr)
{
Date returnDate = null;

if(dateStr == null)
{
return null;
}

try
{
SimpleDateFormat srcFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = srcFormatter.parse(dateStr);

SimpleDateFormat destFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
returnDate = destFormatter.parse(destFormatter.format(date));
}
catch (ParseException e)
{
dbacc.logError("Error while parsing date string" + e.getMessage());
}

Calendar cal = Calendar.getInstance();
cal.setTime(returnDate);

return cal;
}

日期时间类型的绑定(bind)定义如下...
<jxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>

不确定代码有什么问题。任何帮助深表感谢。

最佳答案

默认行为

当编码 java.util.Date如果它们不是 0,则 JAXB 实现将编码它们.

Java 模型(根)

import java.util.Date;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder = { "foo", "bar" })
public class Root {

private Date foo;
private Date bar;

public Date getFoo() {
return foo;
}

public void setFoo(Date foo) {
this.foo = foo;
}

public Date getBar() {
return bar;
}

public void setBar(Date bar) {
this.bar = bar;
}

}

演示
import javax.xml.bind.*;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);

Root root = new Root();
root.setFoo(DatatypeConverter.parseDateTime("2013-08-02T11:50:00-04:00").getTime());
root.setBar(DatatypeConverter.parseDateTime("2013-08-02T11:50:00.123-04:00").getTime());

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}

}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<foo>2013-08-02T11:50:00-04:00</foo>
<bar>2013-08-02T11:50:00.123-04:00</bar>
</root>

使用 XmlAdapter 强制对毫秒进行编码

您可以创建一个 XmlAdapter控制方式 java.util.Date被编码:
  • jaxb unmarshal timestamp

  • 利用 XmlAdapter从 XML 模式开始时

    下面是我给出的答案的链接,演示如何利用 XmlAdapter当您从 XML 模式生成模型时。
  • Using JAXB generated class for an element that requires an integer with a pattern
  • 关于java - 设置 xs :datetime type from java setter method omits milliseconds part of timestamp value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18020614/

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