2016-08-30 10 views
0

I次の日付があります。追加の文字とのSimpleDateFormatを使用してJavaで日付を解析

String data = "20160421095058613000"; 

私はこれが有効な日付であるかのSimpleDateFormatを使用していないかどうかを確認したいが。 私が望むパターンは:"yyyymmddhhmmssSSS" 問題は、このパターンに日付の最後に3つのゼロを含める方法がわからないことです。 私が試してみた:

try { 
     Date date = new SimpleDateFormat("yyyymmddhhmmssSSS000").parse(data); 
      System.out.println(date); 

     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

しかし、私は得る:

java.text.ParseException: Unparseable date: "20160421095058613000" 
    at java.text.DateFormat.parse(DateFormat.java:377) 
    at testare.main(testare.java:11) 
+0

'SimpleDateFormat'はパターンの中で' 000 'という文字列を扱うことができないという数日前の質問がありました(もう見つけられません)。だからあなたはそれを取り除く必要があります。 – Tom

+1

書式文字列が間違っていることに注意してください。月には 'mm'の代わりに' MM'を使います( 'mm'は分を意味するため).12時間の代わりに24時間を解析する必要があるならば、' hh'の代わりに '時の時間値。 – Jesper

+0

@Tomあなたは私にその質問へのリンクを教えてもらえますか? –

答えて

3

あなたが20160421095058613000にあなたの文字列をサブストリングができます。次に、最初の文字列が(SimpleDateFormatを使用して)有効であるかどうかを確認した後、最後の3文字がゼロであるかどうかをチェックします。

0
try { 
      String data = "20160421095058613000"; 
      Date date = new SimpleDateFormat("yyyyMMddhhmmssSSS").parse(data.substring(0, 17)); 
       System.out.println(date); 

      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
0

マイクロ秒

はおそらく、これらの最後の桁はマイクロ秒を表します。古いレガシーの日時クラスは、ミリ秒しか処理できません。

つまり、最後の6桁は1秒の小数部を表します。

ヒント:このデータのソースに何らかの影響がある場合は、日付時刻の値をテキストにシリアル化する際に標準のISO 8601形式に変更してください。あなたはjava.timeパッケージに近代的な日時のクラスを使用する必要があります

java.time

java.timeクラスでは、ナノ秒の分解能を使用します(小数点以下9桁まで)。 6桁のマイクロ秒で十分です。

フォーマットパターンコードについては、DateTimeFormatterクラスを参照してください。古いSimpleDateFormatコードによく似ていますが、同一ではありません。

入力時に入力したとおりに解析すると、UTCからのオフセットまたはタイムゾーンに関する情報が不足しています。

目的のオフセットまたはゾーンがわかっている場合は、それを適用してOffsetDateTimeまたはZonedDateTimeオブジェクトを生成します。

まだjava.time型に更新されていない古いコードと相互運用するには、古いクラスの新しいメソッドを呼び出すことによって変換できます。 java.timeから古い型への移行は、任意のマイクロ秒またはナノ秒がミリ秒に切り捨てられるので、データの損失を意味する可能性があることに注意してください。

これらの問題はすべて、他の質問と回答で何度もカバーされています。詳細情報とサンプルについては、スタックオーバーフローの検索を参照してください。

関連する問題