gpt4 book ai didi

Java 不可解析的日期

转载 作者:行者123 更新时间:2023-11-30 06:19:58 26 4
gpt4 key购买 nike

我有一个格式为:String dateString = "2014-03-17T20:05:49.2300963Z"

试试这个:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.SSSX");
Date date = df.parse(dateString);

导致 Unparsable date 异常。

文档:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html当单个字母用于 TimeZone 时,指示 XISO 8601 一起使用。

编辑重新阅读文档,我稍微调高了 SimpleDateFormat:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
dateString = dateString.replace("Z", "");

我取出 Z 因为我知道时区,使用 H 而不是 k 并添加几个 S 咯咯笑。

现在时间正在解析,但不正确。日期是准确的,时间似乎是随机的。

编辑 2问题是 java 只允许毫秒精度,所以 2300963 被解释为 2300 秒和 963 毫秒。我需要对我的字符串进行一些不同的格式化才能使其正常工作。

编辑 3事实证明,在 Java 中你不能有秒的小数部分。它必须被截断到毫秒。我最终使用了我的数据库提供给我的类型,但一般的解决方案是将秒的小数部分截断为毫秒。我将发布如何执行此操作的示例代码作为答案。

最佳答案

您需要提供与日期 String 中一样多的 S。在这种情况下,7

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.SSSSSSSX");

这是必需的,否则 DateFormat 不知道毫秒结束的位置和时区的开始位置。


还请注意,

2300963

作为毫秒值表示 2300 秒和 963 毫秒。你为什么这样?为什么那些秒不是相应位置值的一部分?当 DateFormat 解析它时,它们将被添加。

关于Java 不可解析的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com