2011-12-22 12 views
6

私は行をコメントアウトした場合、私は次のコードjava.text.ParseException:解析できない日付:YYYY-MM-DD HH:MM:ss.SSSSSS

String dateStr = "2011-12-22 10:56:24.389362"; 
    String formatStr = "yyyy-MM-dd HH:mm:ss.SSSSSS"; 
    Date testDate = null; 
    SimpleDateFormat sdf= new SimpleDateFormat(formatStr); 
    sdf.setLenient(false); 
    testDate = sdf.parse(dateStr); 

    System.out.println("CHECK DATE " + sdf.format(testDate)); 

Exception in thread "main" java.text.ParseException: Unparseable date: "2011-12-22 10:56:24.389362" at java.text.DateFormat.parse(DateFormat.java:337)

ためParseExceptionを取得していますsdf.setLenient(false)、その後、出力に時間差がある CHECK DATE 2011-12-22 11:02:53.000362

何が間違っていますか?

答えて

7

'S'はミリ秒です。 1秒間に1000(0〜999)ミリ秒があります。 389362が999より大きい。余分な389000ミリ秒が389秒または6分29秒に変換され、時間が追加されます。

+0

389362を許可するパターンは何ですか? – Praneeth

+0

ミリ秒は許容される最短時間です。入力を変更して、例では3桁の '389'にしかならず、フォーマットは '.SSS'で終わります。 –

+0

ありがとうございます。入力を3桁の10進数に変更する必要があるか、@GrailsGuyのようなマイクロ秒を許容する独自のパーサーを作成する必要があります – Praneeth

3

ミリ秒単位の日付入力が正しくありません。これは以下のようになります -

String dateStr = "2011-12-22 10:56:24.389";

ます。また、パターン中の「S」Sの余分な数を必要としません。以下で十分です:

String formatStr = "yyyy-MM-dd HH:mm:ss.S";

それが明確Numberのプレゼンテーションタイプにjava docsに記載されている:

数:フォーマットは、パターン文字の数は最小桁 数ですより短い数字はこの量までゼロで埋められます。 解析する場合、隣接する2つのフィールドを区切るのに、 が必要な場合を除いて、パターン文字の数は無視されます()。

それはあなたが本当であるには寛大な設定(またはそのデフォルトの行をコメントアウトして、真の)ときに動作しますが、構文解析について厳密ではないことをパーサを求めているからです。 setLenient()のjavaドキュメントから -

日時解析を寛容にするかどうかを指定します。 寛大な構文解析では、パーサーはヒューリスティックを使用して、このオブジェクトの形式と正確に一致しない入力 を解釈することがあります。厳密な解析では、 の入力はこのオブジェクトの形式と一致する必要があります。

4

Sフォーマット指定子はミリ秒を指します。寛大な構文解析を許可すると、最後の部分は389362ミリ秒と解釈されます。これまでの日付にこれを追加すると、最後の3桁(実際には%1000)が実際のミリ秒になり、予想よりも約389秒(〜6 1/2分)遅れた日付になります。 (厳密な解析を行うと、パーサーは389362ミリ秒が意味をなさないことを知っているため、エラーをスローします)。

日付を保証できるならば、最も簡単な方法は、常にそのように見えます。最後の3桁をオフにします。 (これは時間の約半分が1ミリ秒単位の日付を与えますが、それは日付パーサを記述するよりも優れています...)

2

Sは、millisecondsのためだけに使用されます。マイクロ秒が必要な場合は、独自のパーサーを作成する必要があります。

new Date().toISOString('HH:mm:ss.S') 

リターン:

0

使用toISOString('HH:mm:ss.S')は、あなたが例えば0

を必要として、完全な、ミリ秒(3桁)を取得するための "2012-02-10T12:16:39.124Z"

関連する問題