java - 解析日期时间字符串时时区不一致

标签 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似乎是一个完全有效的月份 - 明年的二月,甚至非宽松的设置也不能强制格式化程序拒绝它。时移问题已解决,时区更改的原因由 Jim Garrison 提供。谢谢艾哈迈德和吉姆

最佳答案

你的点模式是d.M.y H:m,而你的例子显示你的意思是M.d.y H:m,我想这会抛出一个ParseException >,但事实并非如此,并且会导致时区问题。

关于java - 解析日期时间字符串时时区不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899579/

相关文章:

Python:比较日期并打印出第一个

python - 更改 Pandas 中日期时间列的时区并添加为分层索引

Java 系统时区和 JodaTime

java - ConcurrentGCThread 中 Java VM 的随机崩溃

java - Maven 与 Nexus : Creating a zip from the installed artifacts

java - MSSql 服务器 jpa 空间异常

MYSQL - 连接两个表后按日期时间求和行

sql-server - 将 DDMonYY 和时间转换为 SSIS 包中的日期时间列(派生列)

c# - 从 DateTime 获取时区

java - 如何在绑定(bind) fragment 上实现拉动刷新?