Java解析XML日期-排除时间

标签 java parsing

这是我第一次在 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/

相关文章:

parsing - 编译器解析精确 float

ios - Swift 4+SwiftyJson 自动从 JSON 转换/生成对象

parsing - 左分解和左递归之间的区别

java - 调整标签、文本字段和按钮大小

java - 通过单个请求获取数据中心的所有主机系统引用

java - 我正在尝试从子类访问私有(private)变量

ios - 使用 NSURL 无法识别 URL 变量

java - 无法在独立 Tomcat 8.5 上启动 Spring Boot 1.5.1 应用程序

java - logback 有 NullAppender 吗?

android - 如何在 Android 中解析 JSON?