当前位置: 首页 > 面试题库 >

日期字符串在SimpleDateFormat中的解析不正确

秦永望
2023-03-14
问题内容

我正在尝试将UTC中的字符串格式日期转换为日期对象,这导致转换关闭了几分钟。

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US);
fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC"));

解析日期字符串之前- 2014-07-07T18:24:23.788810

解析后的日期是 Tue Jul 08 00:07:31 GMT+05:30 2014

正确的日期转换是 Tue Jul 07 23:54:23 GMT+05:30 2014

转换之间大约相差12-13分钟。我已经观察到转换在10分钟范围内的差异。

知道出了什么问题吗?


问题答案:

SSSSSS 解析的是毫秒数,而不是您期望的毫秒数。

788810毫秒是13分钟,8秒和810毫秒。因此,您的结果实际上是2014-07-07T18:27:31.810。

是的,这是API设计的真正愚蠢之处。它将使 很多 更多的意义S...S是指“几分之一秒”,而不是“毫秒”
-但它从大约预Java的8日期/时间API的最糟糕的事情远远:(

我不 认为 有一种方法可以解析微秒SimpleDateFormat-Java-8之前的Java时间API的精度无论如何都是毫秒-
因此我想您只需要用砍掉最后三位数字substringSSS在格式字符串的结尾。

如果您使用的是Java 8,我强烈建议您使用java.time,我相信它可以解决这种情况。(我没有看过它的解析API,但是我相信它会没事的。)



 类似资料:
  • 下面是SimpleDateFormat的设置。 下面是开发人员文档中可解析日期字符串的可能差异列表。正如您所看到的,它们中没有一个在时区中有冒号。 我的第二个问题是当我得到一个时区设置为Z的日期字符串时,这是将时区设置为GMT的标准,相当于0000。然而,我又得到了一个ParseException。下面是日期字符串的一个示例。 提前致谢

  • 我有字符串格式的日期,我想解析成使用日期。 我将其解析为: 但奇怪的是,如果我通过"03-08-201309hjhkjhk"或"03-88-2013"或43-88-201378",它不会抛出错误,它会解析它。 现在,我必须编写正则表达式模式来检查日期的输入是否正确。但为什么会这样呢?? 代码:

  • 我尝试将字符串转换为日期。

  • 例如,我得到了这个日期字符串: 看起来Android无法解析某些时区。感谢@Burhanuddin Rashid的这种方法。 此处的解决方案:不可更改的日期:“IST 2014年星期五10月10日23:11:07”(偏移量20)

  • 问题内容: SimpleDateFormat: 抛出的异常: 有任何想法吗? 编辑: 感谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我可能应该把它称为一天。 问题答案: 从SimpleDateFormat javadocs : 月:如果图案字母的数目为3或更多,则将月份解释为文本;否则,将其解释为数字。 尝试使用“ MMM dd yyyy”之类

  • 问题内容: 我正在尝试解析 2017-01-23T10:12:31.484Z 使用提供的本机类,但总是失败。如果字符串不包含毫秒,则创建对象不会出现问题。 我已经尝试过很多组合,但总是失败… 任何想法?谢谢! 问题答案: macOS 10.13之前的版本/ iOS 11 不支持包括毫秒在内的日期字符串。 一种解决方法是使用正则表达式删除毫秒部分。 在macOS 10.13 + / iOS 11+中