解析datetime字符串时的时区不一致

时间:2011-02-04 15:16:37

标签: java datetime timezone

我使用SimpleDateFormat将两种类型的字符串转换为ISO格式进行解析,将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()); 

我得到了格式化程序:

  FastDateFormat isoFormatter = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT

从解析后的字符串中创建Date

Date date = FORMAT_SLASH.parse(old);

它的格式为输出:

isoFormatter.format(date)

奇怪的是:当转换带有斜杠的String时,输出看起来像2009-04-14T11:42:00+01:00(这是正确的)但是当转换带有点的String时,输出看起来很像比如2010-02-14T11:42:00+02:00,将我的时区转移到芬兰和南非之间的某个地方,即2010年和截至2月的那一年

这里出了什么问题,为什么?

编辑:更改输出字符串以匹配实际输出(该死的,切割粘贴)。原因是模式字符串中的Md互换,我没注意到。 14似乎是一个完美的有效月份 - 明年2月甚至非宽松的设置都不能强迫格式化程序拒绝它。时移问题得到解决,TimeZone更改的原因由Jim Garrison提供。谢谢艾哈迈德和吉姆

1 个答案:

答案 0 :(得分:1)

您的点阵模式为d.M.y H:m,而您的示例显示您的意思是M.d.y H:m,我认为这会抛出ParseException,但它没有,它会导致时区问题。