Deci和Centi Seconds在java中解析

Bil*_*rza 9 java

我有时间戳作为字符串"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"毫秒.

  • 为什么java不提供解析/格式化deci-seconds和centi-seconds的模式以使事情变得更容易?
  • 这样做的好方法是什么?

And*_*niy 2

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)