2011-02-04 77 views
0

我將兩種類型的字符串轉換爲ISO格式,使用SimpleDateFormat進行分析,org.apache.commons.lang.time.DateFormatUtils進行格式化(因爲他們提供了ISO格式化程序)。

解析字符串的格式爲M/d/y H:md.M.y H:m。一個典型的轉換字符串可能看起來像4/14/2009 11:224.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月份的那一年

這裏出了什麼問題,爲什麼?

編輯:改變輸出字符串以匹配實際輸出(該死的,剪切 - 粘貼)。原因是模式字符串中互換了Md,我沒有注意到。 14似乎是一個完美的有效月份 - 明年的二月,甚至非寬鬆的設置都不能強制格式化工具拒絕它。時間轉換問題已解決,時區更改的原因由Jim Garrison提供。感謝艾哈邁德和吉姆

+0

你的點串確實是`4.14.2009 11:22`嗎?這不適合格式字符串。 – 2011-02-04 19:23:46

+1

請重新閱讀您的文章並修復與m/d/y與d.m.y相關的錯誤(如果有的話),並確保您向我們顯示正確的輸入和輸出。我懷疑你有一個日期被解釋爲月份和日期倒退的問題。如果結果日期(2010/02/04?)位於DST邊界的另一側,則確實可以獲得1小時的抵消。 – 2011-02-04 21:11:26

回答

1

你的圓點圖案爲d.M.y H:m,而你的例子表明,你的意思M.d.y H:m,我認爲這將拋出一個ParseException,但是它沒有,它會導致時區的問題。