簡體   English   中英

使用java.text.SimpleDateFormat解析日期字符串

[英]Parsing a date string using java.text.SimpleDateFormat

我有一個奇怪的問題,我需要解析一個看起來像1997-02-14T00:00:00.0000000+05:30的日期字符串。 關於日期字符串的奇怪之處在於時區信息。 +05:30而不是通常的+0530

我已經准備好了基本格式字符串, yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ ,如果沒有TZ信息的話,它會像一種魅力一樣工作。

誰能建議解決這個問題的方法? 是否有某種可以處理這種TZ信息的格式字符串?

提前致謝。

幾個月前,我本人已經調查了這個問題。 如果我沒記錯的話,SimpleDateFormat不夠靈活,無法接受其他時區格式(我的電話是+530)。 我所做的是一個簡單的預處理步驟-即嘗試在將String傳遞給SimpleDateFormat之前刪除冒號。

您是否可以不使用正則表達式進行預處理並替換時區,例如

String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 

SimpleDateFormat應該接受這一點。 文檔

對於解析,也可以接受常規時區。

這些被指定為

GMTOffsetTimeZone:
             GMT Sign Hours : Minutes

看起來像你有什么?

如果失敗,則Joda DateTimeFormat聲稱可以做到這一點。 由於種種原因,我很想使用Joda(更一致,更簡單的API,格式化程序/解析器的線程安全性等)。

這是不是偶然來自XML文件(ISO8601格式)的日期字符串? 不幸的是,由於SimpleDateFormat無法正確處理時區部分中的“:”,因此沒有(簡便)方法可以使用SimpleDateFormat對此進行解析。

看看我在另一個問題中關於如何解析XML日期時間字符串的答案

當然,總是存在預處理String的技巧。

如果沒有人找到更好的答案,那已經是事情了。 您可以將其封裝在一個方法中,並帶有注釋以解釋該hack。

它的邊緣仍然很粗糙,但是應該可以工作:

http://pastebin.com/f7bbb0b43

我認為它應該使用StringreplaceAll方法進行regular expression

String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");

暫無
暫無

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

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