Android应用SimpleDateFormat解析日期部分设备崩溃求助
日期解析在部分Android设备崩溃的原因及解决办法
崩溃原因
问题核心是区域设置(Locale)不匹配:
SimpleDateFormat默认采用设备系统的Locale,当设备系统语言非英文时(比如中文、法语、德语等),日期字符串里的英文月份缩写"Sep"无法被识别——非英文Locale下的月份缩写是对应语言的格式(例如中文是"9月",法语是"sept"),因此触发ParseException。
解决方案
1. 修复原有SimpleDateFormat代码
给SimpleDateFormat明确指定英文Locale,强制按英文规则解析日期:
var format = SimpleDateFormat("dd MMM, yyyy", Locale.ENGLISH) var date2 = format.parse("1 Sep, 2022")
2. 推荐使用现代日期API(更安全可靠)
SimpleDateFormat存在线程不安全、设计缺陷多等问题,推荐使用Java 8引入的java.time系列API(Android 8.0+直接支持,低版本可通过AndroidX兼容):
import java.time.LocalDate import java.time.format.DateTimeFormatter import java.util.Locale val formatter = DateTimeFormatter.ofPattern("dd MMM, yyyy", Locale.ENGLISH) val date2 = LocalDate.parse("1 Sep, 2022", formatter)
若需兼容Android 7.0及以下,在Module级别的build.gradle中添加AndroidX依赖:
implementation "androidx.core:core-ktx:1.12.0"
内容的提问来源于stack exchange,提问作者Dheeraj Singh Bhadoria
相关产品推荐
相关产品推荐

