我正在寻找一种在两个方向上在java.util.Date和javax.xml.datatype.XMLGregorianCalendar之间进行转换的简单方法.
这是我现在使用的代码:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
/**
* Utility class for converting between XMLGregorianCalendar and java.util.Date
*/
public class XMLGregorianCalendarConverter {
/**
* Needed to create XMLGregorianCalendar instances
*/
private static DatatypeFactory df = null;
static {
try {
df = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException dce) {
throw new IllegalStateException(
"Exception while obtaining DatatypeFactory instance", dce);
}
}
/**
* Converts a java.util.Date into an instance of XMLGregorianCalendar
*
* @param date Instance of java.util.Date …Run Code Online (Sandbox Code Playgroud) 什么是LocalDate从Java 8和XMLGregorianCalendar?之间进行转换的最佳方法?
我知道JAXB(用于XML绑定的Java体系结构)可以编组/解组java.util.Date对象,如Blaise Doughan的回答所示.
但有关新东西java.time包中的对象的Java 8,如ZonedDateTime?JAXB是否已更新以处理这种新的内置数据类型?
我必须通过jax-ws公开ejb服务层.
我使用jax-ws和wsimport生成了web服务但是我被一些奇怪的东西拦住了; 日期被映射到XmlGregorianCalendar.是否可以使用经典的Java Date?你能告诉我正确的方法吗?
谢谢 .编辑:这是我使用的绑定文件:谢谢,我稍微修改了你的xml并将它与netbeans一起附加到客户端的webservice并且它工作正常.我使用的绑定:
<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" wsdlLocation="../wsdl/localhost_8080/web_test/Testor.wsdl" >
<jaxb:globalBindings>
<jaxb:javaType name="java.util.Date"
xmlType="xsd:dateTime"
parseMethod="lol.XsdDateTimeConverter.unmarshal"
printMethod="lol.XsdDateTimeConverter.marshalDateTime"
/><jaxb:javaType
name="java.util.Date"
xmlType="xsd:date"
parseMethod="lol.XsdDateTimeConverter.unmarshal"
printMethod="lol.XsdDateTimeConverter.marshalDate"
/>
</jaxb:globalBindings>
</jaxws:bindings>
Run Code Online (Sandbox Code Playgroud) 我一直在假设既不是线程安全Date也不Calendar是线程安全的,但是,在最近的讨论中,一位同事告诉我Calendar是线程安全的.
所以,我做了一些研究,并没有提出任何建议.有很多人认为它是线程安全的,很多人认为它不是线程安全的.而且,最重要的是,文档不会以某种方式说出任何内容,不是为了Calendar,甚至也不是Date.
那么,这是什么?
java.sql.Timestamp转换为最干净的方法是什么javax.xml.datatype.XMLGregorianCalendar?
鉴于它XMLGregorianCalendar具有BigDecimal小数秒的精度,因此不会损失精度,但是我不确定应该在与时区无关的XMLGregorianCalendar对象上设置哪个时区。java.sql.Timestamp
SO 有一个关于如何转换java.util.DateXMLGregorianCalendar为的答案,以便我可以将其转换Timestamp为,java.util.Date但这会导致亚毫秒范围内的精度损失,这是不必要的,因为目标数据类型(XMLGregorianCalendar)可以保存源数据类型的纳秒部分(Timestamp)。