我有时间戳作为字符串"2013-01-28 11:01:56.9".这里提到56.9秒.
.9秒= 900毫秒
我们可以说它是9分秒或90厘秒
但在java ...
String string = "2013-01-28 11:01:56.9";
String pattern = "yyyy-MM-dd hh:mm:ss.S";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
Date date = formatter.parse(string);
System.out.println(date.getTime());
Run Code Online (Sandbox Code Playgroud)
输出为:1359388916009
这里9解析为009毫秒,因为"S"(Capital-S)用于毫秒.
类似地,如果提供.95秒并用"SS"模式解析,则它给出"095"毫秒而不是"950"毫秒.
1)没有人知道为什么Java不提供解析/格式化十秒和厘秒的模式。但我个人怀疑,虽然你的案例非常有趣,但它是一个非常特殊的格式化案例。
很难想象如此方便的格式化样式,当.符号是整数和浮点部分之间的分隔符时,以及当它只是日期部分之间的分隔符时,它可以区分大小写。
2)关于体面的方式。在我看来,这个简单的预处理应该可以帮助您:
public static String preprocess(String date) {
int pIndex = date.lastIndexOf(".") + 1;
String millis = date.substring(pIndex);
for (int i = millis.length(); i < 3; i++)
millis += "0";
return date.substring(0, pIndex) + millis;
}
Run Code Online (Sandbox Code Playgroud)
UPD:可以写得更简单:
public static String preprocess(String date) {
String millis = date.substring(date.lastIndexOf(".") + 1);
for (int i = millis.length(); i < 3; i++)
date += "0";
return date;
}
Run Code Online (Sandbox Code Playgroud)