标签: xmlgregoriancalendar

java.util.Date到XMLGregorianCalendar

是不是有一种方便的方法从java.util.Date到XMLGregorianCalendar?

java xml date xmlgregoriancalendar

582
推荐指数
8
解决办法
54万
查看次数

Jackson 多态序列化生成错误的类名

当我使用 Jackson 多态序列化时,它会生成一个带有不正确的完全限定类名的 JSON 对象。

下面的代码序列化一个 XMLGregorianCalendar。输出是:

["java.util.GregorianCalendar",-3600000]
Run Code Online (Sandbox Code Playgroud)

我期望以下内容:

["javax.xml.datatype.XMLGregorianCalendar",-3600000]
Run Code Online (Sandbox Code Playgroud)

为什么它输出 java.util.GregorianCalendar?

或者更重要的是:我该如何解决这个问题?

代码示例:

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.ByteArrayOutputStream;

public class JacksonGregorianProblem {

    public static void main(String[] args) throws java.io.IOException, DatatypeConfigurationException {

        XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar();
        ObjectMapper mapper = new ObjectMapper();
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        mapper.writeValue(byteArrayOutputStream, xmlGregorianCalendar);

        System.out.println(byteArrayOutputStream);
    }
}
Run Code Online (Sandbox Code Playgroud)

java gregorian-calendar jackson xmlgregoriancalendar

6
推荐指数
1
解决办法
1344
查看次数

如何将 XMLGregorianCalendar 时间生成为 UTC

我想创建一个XMLGregorianCalendar具有以下特征的:

  • 仅限时间
  • UTC 时区(末尾附加的“Z”)

所以我希望日期打印为:18:00:00Z ( XML Date )。

该元素是一个 xsd:time,我希望时间在 XML 中像这样显示。

<time>18:00:00Z</time>
Run Code Online (Sandbox Code Playgroud)

但我得到以下信息:21:00:00+0000。我在 -3 偏移处,结果是我的偏移量的计算。

为什么我的代码有问题?

protected XMLGregorianCalendar timeUTC() throws Exception {
    Date date = new Date();
    DateFormat df = new SimpleDateFormat("HH:mm:ssZZ");
    df.setTimeZone(TimeZone.getTimeZone("UTC"));
    String dateS = df.format(date);
    return DatatypeFactory.newInstance().newXMLGregorianCalendar(dateS);
}
Run Code Online (Sandbox Code Playgroud)

java utc xmlgregoriancalendar

5
推荐指数
2
解决办法
1万
查看次数

Java中的XMLGregorianCalendar,没有时区

如何创建没有时区的XMLGregorianCalendar?无时间偏移量(0)== UTC,它在输出中输出“ Z”。我的字段的含义是隐式本地时间,在xml记录的其他位置(例如地址)指定位置。

如何创建带有未定义时区(TimeZone不确定)的XMLGregorianCalendar?

有效的XML ISO-8601公历日历格式包括:

  • CCYY-MM-DDThh:mm:ss –不带Zulu时间标记或TimeOffset的是指相对物理位置的本地时间。
  • CCYY-MM-DDThh:mm:ssZ –相对物理位置的DateTime以UTC(Zulu)时间表示,对于本地时间必须进行转换。
  • CCYY-MM-DDThh:mm:ss + 05:30相对物理位置的DateTime以某个时区表示,该时区与UTC时差+5小时30分钟。对于本地时间,我们必须首先转换为UTC,然后通过与UTC进行偏移来转换为本地时间。不能保证所提供的位置是记录位置的本地时间。

java timezone xmlgregoriancalendar

4
推荐指数
1
解决办法
3350
查看次数

如何使用 Gson 反序列化 XMLGregorianCalender?

使用 using处理Json字符串时出现异常:XMLGregorianCalenderGson

java.lang.RuntimeException:无法调用没有参数的 public javax.xml.datatype.XMLGregorianCalendar()

fromJson(..)通过with反序列化的对象Gson有一个XMLGregorianCalender对象。

上述错误的可能解决方案是什么?

java json gson xmlgregoriancalendar

4
推荐指数
1
解决办法
6848
查看次数

在 Java 中格式化 XMLGregorianCalendar

我有一个看起来像这样的日期字符串。

2017-12-06T17:39:00Z

我想要做的是将此字符串转换为 XMLGregorianCalendar 但使用相同的格式。

我现在做的是:

String choosenDate = 2017-12-06T17:39:00Z;

GregorianCalendar c = new GregorianCalendar();

DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_DATE_TIME;
TemporalAccessor accessor = timeFormatter.parse(dateChoisie);

Date date = Date.from(Instant.from(accessor));
c.setTime(date);
System.err.println("choosenDate: " + dateChoisie);
System.err.println("date : " + date);
XMLGregorianCalendar dateXMLGreg = null;
try
{
    dateXMLGreg = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
    System.err.println("dateXMLGreg: " + dateXMLGreg);
}
catch (DatatypeConfigurationException e)
{
    messages.addMessage(new MessageBuilder().error().code("webservice.failure").build());
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

10:47:45,957 错误 [stderr](默认任务 47)选择日期:2017-12-06T17:39:03Z

10:47:45,957 错误 [stderr](默认任务 47)日期:2017 年 12 月 6 日星期三 18:39:03 CET

10:47:45,958 错误 [stderr](默认任务 47) dateXMLGreg:2017-12-06T18:39:03.000+01:00

那么我该怎么做才能让我的 …

java date xmlgregoriancalendar

2
推荐指数
1
解决办法
3711
查看次数

无法访问类 com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl

我的程序需要将一个 xml 文件转换为另一个与通过我们公司程序发送发票兼容的 xml 文件。

代码的编译没有问题,而当我启动 .bat 文件时,出现此错误:

Exception in thread "main" java.lang.IllegalAccessError: 
class controller.ConversionWorker (in unnamed module @0x71c8becc) 
cannot access class com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl (in module java.xml) 
because module java.xml does not export com.sun.org.apache.xerces.internal.jaxp.datatype to unnamed module @0x71c8becc
Run Code Online (Sandbox Code Playgroud)

这是生成异常的代码:

 private XMLGregorianCalendar stringToXMLGregorian(String data, String pattern) {
    Calendar date = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat(pattern);
    try {
        date.setTime(format.parse(data));
    } catch (ParseException e) {
        e.printStackTrace();
        Log.debug("ERRORE DI CONVERSIONE DATA: " + data);
    }

    XMLGregorianCalendar result = new XMLGregorianCalendarImpl();
    result.setYear(date.get(Calendar.YEAR));
    result.setMonth(date.get(Calendar.MONTH) + 1); …
Run Code Online (Sandbox Code Playgroud)

java xmlgregoriancalendar

1
推荐指数
1
解决办法
1万
查看次数

本地日期和服务器java日期时间不同

当我运行下面的代码将 xml 日期转换为 java 日期时,它在本地打印不同的值(CST),在运行相同代码的服务器中打印不同的值(UTC),这可能是什么原因?我怎样才能始终以我在本地获得的 CST 格式打印此日期。我无法使用最新的 java 日期 API,而必须使用基于 XML 的日期。

    import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;

import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;

public class Demo {
    public static final TimeZone TIMEZONE = TimeZone.getTimeZone("America/Chicago");

    public static Date convertDate(XMLGregorianCalendar value) {
        if (value == null) {
            return null;
        } else {
            if (value.getXMLSchemaType() == DatatypeConstants.DATE) {
                return value.toGregorianCalendar().getTime();
            } else {
                return value.toGregorianCalendar(TIMEZONE, null, null).getTime();
            }
        }
    }

    public static void main(String[] args) { …
Run Code Online (Sandbox Code Playgroud)

java datetime date gregorian-calendar xmlgregoriancalendar

1
推荐指数
1
解决办法
425
查看次数