gpt4 book ai didi

java - 字符串到 XMLGregorianCalendar 问题

转载 作者:行者123 更新时间:2023-11-29 05:26:52 25 4
gpt4 key购买 nike

我正在尝试将字符串转换为 XML 公历日期,它总是返回一个新实例,请检查下面的代码

输入日期::2014-03-13 15:34:33 +0000

期望的输出日期::2014-03-13 15:34:33 +0000

但是当我使用下面的代码进行转换时,输出是 2014-03-13T11:34:33.000-04:00

   public static void convertXMLGregorian() throws DatatypeConfigurationException {
TimeZone utc = TimeZone.getTimeZone("UTC");
GregorianCalendar gc = new GregorianCalendar();

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
XMLGregorianCalendar xc=DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
String xcs = df.format(xc.toGregorianCalendar().getTime());

XMLGregorianCalendar converted = stringToXMLGregorianCalendar(xcs, df);
System.out.println("converted " + converted);
// output :: 2014-03-13T11:34:33.000-04:00


// String conversion methods

private static XMLGregorianCalendar dateToXMLGregorianCalendar(Date date) {

try {

GregorianCalendar gc = (GregorianCalendar) GregorianCalendar
.getInstance();

gc.setTime(date);

return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);

} catch (DatatypeConfigurationException e) {

System.out.print(e.getMessage());

return null;

}

}


private static XMLGregorianCalendar stringToXMLGregorianCalendar(
String datetime, SimpleDateFormat sdf) {

try {

Date date = sdf.parse(datetime);

return dateToXMLGregorianCalendar(date);

} catch (ParseException e) {

System.out.print(e.getMessage());

return null;

}

请帮助,在此先感谢。

最佳答案

请参阅下文了解现有代码为何不适合您以及解决方法。然而,为了保留 UTC 偏移量 做整个事情要简单得多,我怀疑你只是想使用 DatatypeFactory.newXMLGregorianCalendar(String) :

// This replaces *all* of the code in the question
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar(datetime);

这里唯一美中不足的是,您的输入看起来没有 T,而规范的 XML 表示却有。这很容易修复:

// The only place you've got a space is exactly where you want a T.
datetime = datetime.replace(' ', 'T');
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar(datetime);

原始答案

我怀疑是这个问题:

GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();

这将在默认时区创建一个日历

如果您始终希望 UTC 偏移量为 0,只需使用:

gc.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

如果您试图保留原始文本中的 UTC 偏移量,那就另当别论了 - 您不能用当前的方法做到这一点,因为 Date 不保留该信息。 (这只是一个瞬间。)

顺便说一句,我强烈建议您更改您的异常处理策略 - 简单地返回 null 并继续好像一切都很好很少是一个好主意。让异常传播或将其包装在更合适的异常类型(可能是运行时异常)中通常是一个更好的主意。

关于java - 字符串到 XMLGregorianCalendar 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383875/

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