gpt4 book ai didi

Java解析XML日期-排除时间

转载 作者:行者123 更新时间:2023-11-30 04:58:25 26 4
gpt4 key购买 nike

这是我第一次在 Java 中深入研究 XML。该代码使用JAXB生成类然后解析。我有一个带有日期的 XML...

JAXB 根​​据我的 XML 生成了一个类。它为该字段生成了以下内容:

@XmlElement(name = "CoverStartDate", required = true)
protected XMLGregorianCalendar coverStartDate;

按照我的逻辑,我有以下内容

xxxx.setCoverStartDate(xmlGregorianCalendar(theDate)

有一个方法 xmlGregorianCalendar 看起来像这样:

GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTime(date);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);

我生成的返回 XML 具有指定的日期和时间。我只想要日期(年月日)。

有什么建议吗?

谢谢

最佳答案

使用DatatypeFactory.newXMLGregorianCalendarDate(...)而不是简单地使用任何 DatatypeFactory.newXMLGregorianCalendar(...) 方法。

我不知道您的代码片段中的 theDate 是什么,但是如果您正在使用 Date您可以使用以下对象。

  public static XMLGregorianCalendar setCoverStartDate(Date date) throws DatatypeConfigurationException {
Calendar calendar = Calendar.getInstance();
date.setTime(date.getTime());
return DatatypeFactory.newInstance().newXMLGregorianCalendarDate(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
getTimeZone(calendar));
}

public static int getTimeZone(Calendar calendar) {
return (int) TimeUnit.MINUTES.convert(calendar.get(Calendar.ZONE_OFFSET), TimeUnit.MILLISECONDS);
}

(请注意,calendar Calendar.ZONE_OFFSET 以毫秒为单位,而 newXMLGregorianCalendarDate(...) 方法期望时区值以分钟为单位,因此需要对其进行转换。)

(另请注意,Calendar 的 月份索引是从 0 开始的,而 XMLGregorianCalendar 的 月份是从 1 开始的。)

如果这不起作用,那么您用来生成 JAXB 类的 XML 模式可能是错误的:可能它没有指定 xs:date XML 模式类型的用法(可能是它使用 xs:dateTime 代替)。

最后一个建议:手动创建 JAXB 类。然后你可以指定像@XmlSchemaType这样的注释在你的类(class)领域给你更多的控制权。

关于Java解析XML日期-排除时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7736148/

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