9

我有时间戳作为字符串“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());

输出为:1359388916009

这里 9 被解析为 009 毫秒,因为“S”(Capital-S)用于毫秒。

类似地,如果 0.95 秒作为“SS”模式提供并解析,它给出“095”毫秒而不是“950”毫秒。

  • 为什么 java 不提供模式来解析/格式化十进制秒和厘秒以使事情变得更容易?
  • 这样做的体面方法是什么?
4

1 回答 1

2

1) 没有人知道为什么Java 不提供模式来解析/格式化 deci-seconds 和 centi-seconds。但我个人怀疑,尽管您的案例非常有趣,但它是一个非常特殊的格式化案例。

很难想象这种方便的格式化风格,它允许区分大小写,当.符号是整数和浮点部分之间的分隔符时,以及它只是日期部分之间的分隔符时。

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;
}

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;
}
于 2013-01-28T09:21:27.820 回答