2

以下のコードを使用して、次の文字列を秒数に変換する必要があります。

String sDuration = "00:00:24.20";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SS");
videoLength = dateFormat.parse(sDuration);
Logger.debug("Duration: " + videoLength + " timestamp: " + videoLength.getTime());

しかし、応答として得られるのは次のとおりです。

Duration: Thu Jan 01 00:00:24 GMT 1970 timestamp: -3575980

最初は問題ないようですが、計算のために .getTime() が必要で、負の数が得られますか? 私は24200のようなものを得ると思っていました。

4

4 に答える 4

4

Dateが期間 (むしろ特定の時点) で使用されることを意図しているかどうかは完全にはわかりません。

ただし、別のアプローチを次に示します。

String[] hms = sDuration.split(":");

double sec = Integer.parseInt(hms[0]) * 3600
           + Integer.parseInt(hms[1]) * 60
           + Double.parseDouble(hms[2]);
于 2012-05-24T11:05:48.953 に答える
2

さらに別のアプローチ:

String sDuration = "00:00:24.20";
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SS");
Date end = dateFormat.parse(sDuration);
Date start = dateFormat.parse("00:00:00.00");
System.out.println("Duration: " + (end.getTime() - start.getTime()));
于 2012-05-24T11:08:28.577 に答える
1

私はいくつかのテストを行ってきましたが、これらの背後にある理由はあなたがいるタイムゾーンです。

私が行った場合

Date begin = new Date().setTime(0);
System.out.println(begin);

私はこの出力を取得します:

1月1日木曜日01:00:00CET1970

したがって、00:00 :: 00から01:00:00の間は、私のタイムゾーンのミリ秒数が負になります。

于 2012-05-24T11:18:38.463 に答える
0

SimpleDateFormatはスレッドセーフではないことを忘れないでください。次のように呼び出す必要があります。

    private static final ThreadLocal<SimpleDateFormat> SIMPLE_DATE_FORMAT = new ThreadLocal<SimpleDateFormat>() {
    @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("format"); };
    @Override public void set(SimpleDateFormat value) { /*...*/ };
};
于 2012-05-24T11:28:10.213 に答える