【发布时间】:2021-08-15 17:18:28
【问题描述】:
我有一个字符串日期,我将其转换为XMLGregorianCalendar。下面的代码将其转换为没有错误。但是,我将日期传递给的系统会收到下面报告的错误。
以下XMLGregorianCalendar 有效:
下面的XMLGregorianCalendar 不起作用(下面的代码将它转换成这个):
问题
如何将字符串转换为所需的格式?
public static void main(String []args){
try {
String commenceTOString = "2021-06-30 05:00:00";
java.util.Date dateCommence = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(commenceTOString);
System.out.println(dateCommence);
java.util.GregorianCalendar c = new java.util.GregorianCalendar();
c.setTime(dateCommence);
javax.xml.datatype.XMLGregorianCalendar commence = javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
System.out.println(commence);
} catch (Exception e) {
e.printStackTrace();
}
}
错误
E:消息验证失败。错误:[cvc-pattern-valid:值 '2021-06-30T06:30:00.000+02:00' 不是方面有效的 图案 '(((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-9]))) |((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-30)))| (((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19 [0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d) |(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0 -2]))-(29|30)))))T([0-1][0-9]|[2][0-3])(:([0-5][0-9] )){1,2}' 对于类型“dateTime”.cvc-attribute.3:值 属性“DepartureDateTime”的“2021-06-30T06:30:00.000+02:00”开启 元素“FlightSegment”就其类型而言无效, '约会时间'。]。 http://www.elleipsis.com/booking/exception/35a8ac87-6743-4719-9504-a8a17a1a0471
【问题讨论】:
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。
标签: java date xmlgregoriancalendar