簡體   English   中英

日期從yyyy-MM-dd HH:mm:ss轉換為ISO日期yyyy-MM-dd'T'HH:mm:ssXXX格式問題

[英]Date conversion from yyyy-MM-dd HH:mm:ss to ISO date yyyy-MM-dd'T'HH:mm:ssXXX format issue

我正在嘗試將日期格式從yyyy-MM-dd HH:mm:ss轉換為ISO日期格式yyyy-MM-dd'T'HH:mm:ss + 5:30,並通過以下代碼對其進行了測試,在Eclipse上運行時工作正常,並導致通過jar部署到服務器時出現問題。

問題是日期(輸入:2016-01-08 10:22:03)轉換為2016-01-08T10:22:03Z而不是2016-01-08T10:22:03 + 5:30。

注意:我正在使用Java 8。

以下是用於轉換日期的代碼,

 SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
 SimpleDateFormat inputDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String FinalDate = outputDate.format(inputDate.parse(pickupDate));
 System.out.println(finalDate);

其他奇怪的經驗是,在某些計算機上該問題無法重現,而在某些計算機上存在該問題。 是某種依賴於機器還是JVM的東西? 請幫忙。

先感謝您。

如SimpleDateFormat的文檔所示:

對於格式化,如果距GMT的偏移值為0,則生成“ Z”。 如果圖案字母的數量為1,則忽略一小時的任何分數。 例如,如果模式為“ X”且時區為“ GMT + 05:30”,則會生成“ +05”。

因此,我的猜測可能是檢查服務器的時區。 由於它認為輸入日期的時區為GMT 0。

java.time

如果使用Java 8或更高版本,則應使用java.time類,而不要使用那些臭名昭著的日期時間類java.util.Date/.Calendar。

ISO 8601

您的輸入字符串接近標准ISO 8601格式。 解析和生成日期時間值的文本表示時,默認情況下,java.time類使用這些標准格式。 無需為此類標准輸入定義編碼的解析模式。

要完全符合ISO 8601,請將中間的SPACE替換為T

String inputStandardized = "2016-01-08 10:22:03".replace( " " , "T" );

沒有時區或偏移的解析

該字符串沒有自UTC偏移量或時區,因此我們首先創建一個LocalDateTime

LocalDateTime localDateTime = LocalDateTime.parse( inputStandardized );

這些對象是日期時間的模糊概念,但實際上不在時間軸上。 要在時間線上定義實際時刻,我們必須應用時區。

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = localDateTime.atZone( zoneId );

申請時區

請注意,特定的日期和時間在指定的時區可能無效; java.time會根據需要進行調整。 請務必閱讀文檔以了解調整行為。

格式化字符串

默認情況下, ZonedDateTime上的toString方法以ZonedDateTime的格式生成一個String,除了擴展為將時區的名稱附加在方括號中。

String output = zdt.toString();

2016-01-08T10:22:03 + 05:30 [亞洲/加爾各答]

這種擴展包括時區名稱是很有意義的。 時區不僅是與UTC的偏移量,還包括處理異常的當前和歷史規則,例如夏令時(DST)。

如果您確實不希望添加該時區名稱,則可以按照我的建議使用可以在java.time中定義為常量的備用格式設置模式ISO_OFFSET_DATE_TIME

DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME ;
String output = zdt.format( formatter );

2016-01-08T10:22:03 + 05:30

膠印機偏移時間

順便說一句,您可以通過在與UTC的偏移量中始終添加前導填充零來避免問題。 因此,請使用+05:30而不是問題中所示的+5:30

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM