gpt4 book ai didi

java - 在java中格式化XMLGregorianCalendar

转载 作者:行者123 更新时间:2023-12-01 20:03:31 25 4
gpt4 key购买 nike

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

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());
}

这给了我以下输出:

10:47:45,957 ERROR [stderr] (default task-47) choosenDate: 2017-12-06T17:39:03Z

10:47:45,957 ERROR [stderr] (default task-47) date : Wed Dec 06 18:39:03 CET 2017

10:47:45,958 ERROR [stderr] (default task-47) dateXMLGreg: 2017-12-06T18:39:03.000+01:00

那么我该怎么做才能让我的 XMLGregorianCalendar dateXMLGreg 看起来像:

2017-12-06T17:39:03Z

最佳答案

这比您想象的要容易。

    String isoDateTime = "2017-12-06T17:39:00Z";
XMLGregorianCalendar dateXMLGreg = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(isoDateTime);
System.out.println(dateXMLGreg);

这会打印

2017-12-06T17:39:00Z

newXMLGregorianCalendar 有一个重载版本,它接受字符串 - your 字符串 - 作为参数。我相信您会像问题中那样添加 try/catch。

编辑:您的XMLGregorianCalendar 将其毫秒设置为DatatypeConstants.FIELD_UNDEFINED。这样做是为了避免将毫秒打印为 toString() 结果的一部分(当您打印 XMLGregorianCalendar 时会隐式调用它)。

再编辑:正如 Basil Bourque 在 a comment 中正确所说的那样,根据您需要 XMLGregorianCalendar 的用途,您可以使用现代 Java 日期和时间 API java.time 中的类,甚至从中受益。例如:

    Instant dateInst = Instant.parse(isoDateTime);
System.out.println(dateInst);

这给出了与上面完全相同的输出,2017-12-06T17:39:00Z。仅当偏移量始终为 Z 时,Instant 类才会工作,这可能是因为这是您要求返回的内容。 java.time 的潜在优势包括 (1) API 通常更易于使用 (2) 如果您需要一些进一步的日期时间操作,现代 API 提供了丰富的操作。如果偏移量可能会有所不同,您可以尝试使用 OffsetDateTime,但这是一个较长的故事,我将留给其他问题。

关于java - 在java中格式化XMLGregorianCalendar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711877/

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