我注意到 Android 的 SimpleDateFormat
在读取 Android 4.x 和 5.0 之间的格式化程序的毫秒数时存在差异。
String dateString = "2012-10-01 00:00:00.000087";
// ORMLite date format as seen at https://github.com/j256/ormlite-core/blob/master/src/main/java/com/j256/ormlite/field/types/BaseDateType.java
SimpleDateFormat formatForDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
try{
Date parsedDate = formatForDate.parse(dateString);
// Android 5.0 parsedDate.getTime() ends in 000
// Android 4.x parsedDate.getTime() ends in 087 as expected
}
catch (ParseException e) {
e.printStackTrace();
}
如评论中所述,在 android 4.x 上运行上述代码时,我得到的结果与在 Android 5.0 上运行时的结果不同。它似乎为 Android 5 丢弃了 MS 字段。
(当我将格式更改为以 .SSS
结尾并将值更改为删除额外的零以使其仅为 087
时,日期在 Android 5.0 上得到了正确解析。这这不是一个很好的解决方法,因为我所有的数据库字段都以 SSSSSS
格式保存,这是 ORMLite 的默认格式。)
我似乎找不到 Google 在 SimpleDateFormat
代码中所做的更改。什么会导致这样的问题?我可以在哪里寻找修复程序?
最佳答案
根据 Java 1.5 或更新版本,您是正确的:
For parsing, the number of pattern letters is ignored unless it's needed to separate two adjacent fields.
然而,根据Android documentation , S 被右填充并且不忽略解析长度,因此“SSSSSS”表示微秒(或忽略右侧三位数字的毫秒),Android 5.0 实现是正确的。
编辑:限制和IllegalArgumentException
不适用于S
关于android - 解析日期在不同的 Android 版本上有不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561759/