3

SimpleDateFormatJDBC タイムスタンプ、特に次の形式の日付を解析してフォーマットするパターンを考え出そうとしています。yyyy-mm-dd hh:mm:ss.fffffffffここで、ffffffffffはナノ秒を示します。

残念ながらnew SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000000")機能しません。次の例外がスローされます。

java.text.ParseException: Format.parseObject(String) failed

これは SimpleDateFormat でまったく可能ですか、またはこのケースを処理するために java.text.DateFormat のカスタム サブクラスを作成する必要がありますか? Java で文字列を解析する方法に関する質問ではないことに注意してくださいyyyy-mm-dd hh:mm:ss.fffffffff。宣言型のアプローチ、つまり、入力文字列の追加の変更を必要としない SimpleDateFormat パターンに興味があります。

2012-02-05 17:00:34.427000000 入力は、ミリ秒の部分が .java.util.Date として解析されることを期待しています427

これは私がこれまでに試したフォーマットのリストで、さまざまな理由ですべて失敗しました:

  • new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS000000")-java.text.ParseException: Format.parseObject(String) failed
  • new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSSSS", Locale.US)new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)- の両方が、予想されるSun Feb 05 17:00:34ではなく、Fri Feb 10 15:37:14として解析されます。(SSS のみが指定されている場合でも、 427000000のナノ秒の部分はミリ秒として扱われます)
4

3 に答える 3

1

編集: データ サンプルを提供していただいたので、かなり単純です。

"yyyy-MM-dd HH:mm:ss.SSS"

それは確かにあなたが与えた値を解析します。Locale.US異なるセパレーターを使用しようとしないように、明示的に指定することもできます...

編集:ミリ秒を超える末尾のデータは問題を引き起こします。ただし、データの最初の部分は固定長 (23 文字だと思います) であるため、次のように記述できるはずです。

Date date = format.parse(text.substring(0, 23));
于 2012-07-31T13:01:27.030 に答える
0

RFC3339の日付パターンの形式は次のとおりです。

yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

リソース プロバイダーから別の日付形式が提供されている場合を除きます。

小数秒がある場合:

yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'

編集:あなたの例に基づいて、文字列を解析するために取得した形式は次のとおりです。

DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
于 2012-07-31T13:01:50.133 に答える