9

文字列「2013-01-2811: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

ここでは、「S」(Capital-S)がミリ秒単位で使用されているため、9は009ミリ秒として解析されます。

同様に、.95秒が「SS」パターンとして提供され、解析される場合、「950」ミリ秒ではなく「095」ミリ秒になります。

  • なぜjavaは、物事を簡単にするためにデシ秒とセンチ秒を解析/フォーマットするパターンを提供しないのですか?
  • そうするためのまともな方法は何ですか?
4

1 に答える 1

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

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 に答える