特定 Android 设备中的 SimpleDateFormat 字符串解析问题 [重复]

SimpleDateFormat string parsing issue in a Specific Android Device [duplicate]

提问人:oTwo 提问时间:9/5/2023 最后编辑:AnonymousoTwo 更新时间:9/5/2023 访问量:116

问:

我有一个已发布的 android 应用程序,并且特定设备出现了一个奇怪的问题。在分析 Crashlytics 数据时,我发现该应用程序因以下原因而崩溃:

val time1 = SimpleDateFormat("MMM dd yyyy HH:mm:ss",Locale.getDefault()).parse(dateString)

其中 dateString 为“Sep 6 2023 14:00:00”

报告的确切错误问题是

由 java.text.ParseException 引起 不可解析的日期:“Sep 6 2023 14:00:00”

我以前在其他设备上没有遇到过这个问题。该设备的具体情况如下:

装置 品牌:小米 型号:Redmi Note 10 Pro 方向:纵向 可用内存:1.88 GB 可用磁盘:2.48 GB 操作系统 版本:Android 13 方向:纵向 已扎根:否 崩溃 日期:Sep 5, 2023, 4:19:40 PM 应用版本:6.1.2 (54)

附加输入:

它也会失败

deteString:“2023 年 9 月 15 日 24:00:00”

所以问题不在于 d 或 dd

java android 日期 simpledateformat 小米

评论

2赞 Anonymous 9/6/2023
考虑扔掉早已过时且臭名昭著的麻烦和朋友。使用脱糖来使用 java.time,即现代 Java 日期和时间 API。使用它要好得多。SimpleDateFormat
1赞 Anonymous 9/6/2023
该设备无法正常工作的默认区域设置是什么?我敢打赌它有一个语言设置,其中 September 的缩写不是 .如果应为英语,请指定讲英语的区域设置。 返回。24 点被视为午夜,第二天 00:00:00(老式班级也做了类似的事情)。SepSepLocalDateTime.parse("Sep 15 2023 24:00:00", DateTimeFormatter.ofPattern("MMM d uuuu HH:mm:ss", Locale.ROOT))2023-09-16T00:00
2赞 Arvind Kumar Avinash 9/6/2023
作为 @OleV.V.正确地指导了你,问题出在.无论如何,使用日期时间格式化程序是无用的。对于像 Sep 6 2023 14:00:00 这样的英文文本,必须使用 或 。Locale.getDefault()Locale.getDefault()Locale.ENGLISHLocale.ROOT
1赞 oTwo 9/6/2023
@OleV.V.我正在接受您的建议,并将在应用程序的下一次重大更新中丢弃 SimpleDateFormat。日期是我应用的基石,在多个地方使用。所以我需要一些时间来进行更新。同时,使用 Arvind 的建议进行快速修复。
1赞 Basil Bourque 9/6/2023
@oTwo 您可以轻松地与旧类之间的转换,也可以通过添加到旧类的新方法进行转换。在 java.time 中完成所有工作,然后在需要与旧代码互操作的地方进行转换。java.util.Datejava.time.Instant

答:

-1赞 Sohaib Ahmed 9/5/2023 #1

您的日期是单字符的,例如“Sep 6 2023 14:00:00”中的“6”

尝试格式“MMM d yyyy HH:mm:ss”,如下所示:

val pattern = SimpleDateFormat("MMM d yyyy HH:mm:ss", Locale.getDefault())
val time1 = pattern.parse(dateString)

或将单个字符的日期生成更新为“06”

评论

0赞 oTwo 9/5/2023
我是这样想的。挑战在于,我需要一些时间才能意识到这是否有效。知道为什么其他设备不会发生这种情况吗?
1赞 oTwo 9/5/2023
问题仍然存在,“Sep 15 2023 24:00:00”。所以问题不在于 d 或 dd。同一台设备
0赞 Anonymous 9/6/2023
在我的电脑上,我仍然得到.很抱歉,恐怕你的回答无济于事。我觉得这没问题,因为帮助用户如何使用早已过时且臭名昭著的麻烦确实对他们不利。每个人都最好切换到 java.time,即现代的 Java 日期和时间 APIParseException: Unparseable date: "Sep 6 2023 14:00:00"SimpleDatFormat
0赞 Sohaib Ahmed 9/7/2023
恐怕,这对你不起作用。它是否在所有时间都抛出任何日期的异常?还是针对特定字符串?
0赞 Anonymous 9/10/2023
使用你的代码,我得到了所有的 和 .有关正确解决方案,请参阅链接的原始问题及其答案ParseExceptionSep 6 2023 14:00:00Sep 06 2023 14:00:00Sep 26 2023 14:00:00