我將兩種類型的字符串轉換爲ISO格式,使用SimpleDateFormat
進行分析,org.apache.commons.lang.time.DateFormatUtils
進行格式化(因爲他們提供了ISO格式化程序)。
解析字符串的格式爲M/d/y H:m
和d.M.y H:m
。一個典型的轉換字符串可能看起來像4/14/2009 11:22
或4.14.2009 11:22
。我初始化解析器如下:分析日期時間時的時區不一致字符串
SimpleDateFormat SLASH = new SimpleDateFormat(PATTERN_S, Locale.getDefault());
SimpleDateFormat DOT = new SimpleDateFormat(PATTERN_D, Locale.getDefault());
我得到的格式:
Date date = FORMAT_SLASH.parse(old);
它的格式輸出:
FastDateFormat isoFormatter = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
從分析的字符串創建Date
後:
isoFormatter.format(date)
奇怪的是:當一個帶有斜槓的String
被轉換時,輸出看起來像2009-04-14T11:42:00+01:00
(這是正確的),但是當帶點的String
轉換後,輸出看起來像2010-02-14T11:42:00+02:00
,將我的時區轉移到芬蘭和南非之間的某個地方,到2010年和到2月份的那一年
這裏出了什麼問題,爲什麼?
編輯:改變輸出字符串以匹配實際輸出(該死的,剪切 - 粘貼)。原因是模式字符串中互換了M
和d
,我沒有注意到。 14
似乎是一個完美的有效月份 - 明年的二月,甚至非寬鬆的設置都不能強制格式化工具拒絕它。時間轉換問題已解決,時區更改的原因由Jim Garrison提供。感謝艾哈邁德和吉姆
你的點串確實是`4.14.2009 11:22`嗎?這不適合格式字符串。 – 2011-02-04 19:23:46
請重新閱讀您的文章並修復與m/d/y與d.m.y相關的錯誤(如果有的話),並確保您向我們顯示正確的輸入和輸出。我懷疑你有一個日期被解釋爲月份和日期倒退的問題。如果結果日期(2010/02/04?)位於DST邊界的另一側,則確實可以獲得1小時的抵消。 – 2011-02-04 21:11:26