[英]Fetching Date from XMLGregorianCalendar
我一直在進行需要從XMLGregorianCalendar提取日期的任務,已將其轉換為GregorianCalendar並嘗試從中獲取日期,但是我看到存儲在XMLGregorianCalendar中的原始日期與從toGregorianCalendar獲取的日期之間的區別,我想要日期為格式為UTC,源時區也為UTC。請找到代碼段以供參考。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ";
sdf.setTimeZone(TimeZone.getTimeZone("UTC"))
String date = sdf.format(xmlGregorianCalendar.toGregorianCalendar().getTime());
我想知道是否有任何方法可以從帶有UTC時區的XMLGregorianCalendar中獲取日期,並且沒有任何時差。以下是存儲在XMLGregorianCalendar中的示例源日期
2018-07-06T05:11:00.050Z
我用SimpleDateFormat格式化后,期望與字符串完全相同的日期。非常感謝您的幫助,在此先感謝您!
OffsetDateTime dateTime = xmlGregorianCalendar.toGregorianCalendar()
.toZonedDateTime()
.toOffsetDateTime();
System.out.println("Date-time with explicit offset: " + dateTime);
System.out.println("Offset is " + dateTime.getOffset());
使用您的XMLGregorianCalendar
打印:
Date-time with explicit offset: 2018-07-06T05:11:00.050Z
Offset is Z
Z
表示UTC或偏移零或Zulu時區。 因此,這為您提供了帶有明確偏移量的UTC日期和時間。
如果您真正需要的只是正確的時間點,通常可以使用Instant
:
Instant pointInTime = xmlGregorianCalendar.toGregorianCalendar()
.toZonedDateTime()
.toInstant();
System.out.println("As point in time: " + pointInTime);
輸出:
As point in time: 2018-07-06T05:11:00.050Z
您會注意到日期和時間的打印與之前一樣,包括Z
表示UTC。 區別在於: OffsetDateTime
可以保存任何偏移量(如果XMLGregorianCalendar
可以,則可以保留不同的偏移量)。 Instant
被認為是與任何區域或偏移量無關的時間點。 只有使用UTC打印日期和時間的toString
方法,后綴對於UTC始終為Z
首先, SimpleDateFormat
類不僅已過時。 眾所周知,它也很麻煩,特別是在解析時,但仍然如此。 TimeZone
也已過時。 正如我在上面的代碼片段中所做的java.time
,您將更喜歡使用現代的Java日期和時間API java.time
。
我運行了您的代碼並得到2018-07-06T05:11:00.050+0000
。 與UTC的零偏移量以不同的方式打印,但是字符串與您想要的內容一致。
您不能具有帶有時區或偏移量的java.util.Date
(另一個過時的類)。 它代表一個時間點,僅此而已。
java.time
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.