我使用SimpleDateFormat
将两种类型的字符串转换为ISO格式进行解析,将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());
我得到了格式化程序:
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月的那一年
这里出了什么问题,为什么?
编辑:更改输出字符串以匹配实际输出(该死的,切割粘贴)。原因是模式字符串中的M
和d
互换,我没注意到。 14
似乎是一个完美的有效月份 - 明年2月甚至非宽松的设置都不能强迫格式化程序拒绝它。时移问题得到解决,TimeZone更改的原因由Jim Garrison提供。谢谢艾哈迈德和吉姆
答案 0 :(得分:1)
您的点阵模式为d.M.y H:m
,而您的示例显示您的意思是M.d.y H:m
,我认为这会抛出ParseException
,但它没有,它会导致时区问题。