gpt4 book ai didi

java - 将 'java.sql.Date' 转换为类 'javax.xml.datatype.XMLGregorianCalendar'

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:56 24 4
gpt4 key购买 nike

我有一个场景,我必须将 java.sql.Date 转换为类 javax.xml.datatype.XMLGregorianCalendar 并且我尝试了以下操作

GregorianCalendar cal = new GregorianCalendar();
cal.setTime(financialTransactionProcessDataObj.invReceivedDate);
DatatypeFactory dTF = DatatypeFactory.newInstance();
XMLGregorianCalendar date = dTF.newXMLGregorianCalendar(cal);

我得到了

java.lang.SecurityException: Restricted method invocation. for DatatypeFactory

还有其他方法吗?

最佳答案

我假设您想要的结果是 XMLGregorianCalendar,例如 2018-06-30T00:00:00.000+02:00(至少这是我运行时得到的结果你的代码在我的电脑上(它有效))。

此答案进一步假设您正在从 SQL 数据库获取 java.sql.Date 并且您希望 XMLGregorianCalendar 用于 String 你从它的 toXMLFormat 方法得到的。如果是这样,我建议您既不需要 java.sql.Date 也不需要 XMLGregorianCalendar(没错)。

从结果集中获取日期:

    LocalDate invReceivedDate = yourResultSet.getObject("inv_receive_date", LocalDate.class);

我没有测试过代码,您当然应该替换正确的列标签而不是 inv_receive_date。如果使用 JPA,现代版本也可以为您提供 LocalDate 对象。

获取 XML 字符串:

    OffsetDateTime date = invReceivedDate.atStartOfDay(ZoneId.systemDefault())
.toOffsetDateTime();
System.out.println(date.toString());

在我的测试运行中打印了这个

2018-06-30T00:00+02:00

如果您与我之前从date.toXMLFormat() 得到的字符串进行比较,您会注意到没有打印秒和秒的小数部分。这可能没问题。格式为 ISO 8601,根据该标准,秒和秒的小数部分是可选的,因此当它们为 0 时将它们排除在外应该可行。如果您有特殊要求包含它们,您可以使用

    DateTimeFormatter formatterForXml
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSxxx");
System.out.println(date.format(formatterForXml));

这次的输出是

2018-06-30T00:00:00.000+02:00

与之前的 date.toXMLFormat() 完全一样。也有可能您只需要没有时间和 UTC 偏移量的日期。如果是这样,它更简单:

    System.out.println(invReceivedDate.toString());

输出:

2018-06-30

为什么? 不仅仅是因为它有效。 java.sql.Date 早已过时且设计不佳,所以不要使用它。相反,我使用 java.time 中的 LocalDate,现代 Java 日期和时间 API。现代 API 更易于使用。

链接: Oracle tutorial: Date Time解释如何使用 java.time

关于java - 将 'java.sql.Date' 转换为类 'javax.xml.datatype.XMLGregorianCalendar',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49272692/

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