我注意到
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代码中所做的更改.什么会导致问题lilke这个?我可以在哪里寻找解决方案?
最佳答案 根据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.