[英]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,格式化程序/解析器的線程安全性等)。
當然,總是存在預處理String的技巧。
如果沒有人找到更好的答案,那已經是事情了。 您可以將其封裝在一個方法中,並帶有注釋以解釋該hack。
它的邊緣仍然很粗糙,但是應該可以工作:
我認為它應該使用String
的replaceAll
方法進行regular expression
。
String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.