3

の形式でタイムスタンプを持ってい03-AUG-12 08.15.00.000000000 PM -05:00 ます。Stringyyyy-MM-dd HH:mm:ss

これが私のコードです:

public static void convert() {

    String oldstring = "03-AUG-12 08.15.00.000000000 PM -05:00";
    Date date = null;
    try {
        date = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.S aa").parse(oldstring);
    }
    catch (ParseException e) {
        e.printStackTrace();
    }

    String newstring = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    System.out.println(newstring);
}

基本的には、Oracle データベースからのタイムゾーン形式のタイムスタンプです。

4

3 に答える 3

4

SimpleDateFormat を使用してそのような文字列を解析することはできません。少なくともいくつかの制限があります。

  • -05:00 (ISO 8601 による) のようなタイムゾーン指定子は、Java 7 までサポートされていません。Java 7 では、XXX パターンを使用して解析できます。

  • 月名を正しく解析するには、英語ロケールが必要であることを指定する必要があります。

  • ミリ秒 (S) のパターンは、無制限の桁数を解析します。文字列に「08.15.00.100000000」が含まれている場合、SimpleDateFormat はこれを 8:15:00 および 100000000ms として解析し、期待値にほぼ 28 時間を追加します。値が常に 0 であることが確実な場合は、この問題を無視できます。

前の問題を受け入れて Java 7 を使用できる場合は、次のようなものを使用する必要があります。

new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa XXX", Locale.ENGLISH)

于 2012-05-04T16:22:35.557 に答える
3

この行を次のように変更します。

        date = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa").parse(oldstring);

hAM / PM時間1〜12を解析する小文字を使用する必要があります。

于 2012-05-04T16:11:26.293 に答える
1
于 2016-09-05T21:59:38.633 に答える