奇怪的事情在绝望的时候发生。
我在这段代码中遇到了一些奇怪的事情
Date time = new SimpleDateFormat("hh:mm a", Locale.getDefault()).parse("04:30 PM");
正在给予
“无法解析的日期:\“ 04:30 PM \”(偏移量为6)“
仅在生产应用(在Google Play商店中)的Android 6.0和Android 6.0.1设备中例外。
PS:我无法在Android 6.0 Emulator和HTC Desire 10 Pro Android 6.0.1上重新生成此错误。 在本地重新生成此错误或如何解决该错误的任何帮助将不胜感激。
编辑:2018年11月15日 出现此异常的设备。
操作系统版本:3.4.0-10662519(G900FXXS1CQD8) 操作系统API级别:23 设备:klte 型号(和产品):SM-G900F(kltexx) 制造商:三星 其他标签:释放键 SD卡状态:已安装 http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0.1; SM-G900F Build / MMB29M)
操作系统版本:3.10.84(v1AJW-0) 操作系统API级别:23 设备:idol4 型号(和产品):6055K(6055K) 制造商:TCL 其他标签:释放键 SD卡状态:已安装 http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0.1; 6055K Build / MMB29M)
操作系统版本:3.10.84-g05b37ae(16293194481ff) 操作系统API级别:23 设备:p1 型号(和产品):LG-H818(p1_global_com) 制造商:LGE 其他标签:释放键 SD卡状态:已安装 http.agent = Dalvik / 2.1.0(Linux; U; Android 6.0; LG-H818 Build / MRA58K)
答案 0 :(得分:1)
字符串的偏移量6表示PM
。
这是一个地区问题。 AM
和PM
尽管是从拉丁语衍生而来的,但是用英语而不是其他许多语言来称呼。因此,这些缩写在很多语言环境中都不被认可。在您的代码中,您使用Locale.getDefault()
,并且如果它返回的语言不是英语,则很可能会出错。例如,尝试使用Locale.ENGLISH
。另外,请确保以正确的格式和语言获得默认语言环境的字符串。
如果您正在处理应用程序中的时间或日期,并且还需要进行Java 8或更高版本或Android API级别26或更高级别的编程,请使用Date
和{{ 1}},一直都有设计问题,尤其是后者通常很麻烦。幸运的是,两者现在都已经过时了,现在已由现代Java日期和时间API java.time取代。因此,请改用此:
SimpleDateFormat
输出:
16:30
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm a", Locale.ENGLISH);
LocalTime time = LocalTime.parse("04:30 PM", timeFormatter);
System.out.println(time);
是一天中没有日期且没有时区的时间,似乎比老式LocalTime
类更适合您的需求。
是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
Date
导入日期和时间类。org.threeten.bp
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。