2016-12-12 13 views
1

私は古いプログラムを持っており、それをJava 8にアップグレードしました。今はLocalDateTimeを利用したいと思います。私はすでにエンティティを更新しており、値は10-APR-1990となっています。to_dateを使用し、LocalTimeDateをテストするデータベースから日付をテストする

は、しかし、私は次のエラーを取得しています:私のテストで

java.time.format.DateTimeParseException: Text '10-APR-90' could not be parsed at index 3

私はDateTimeFormatterを使用してそれを解析しようとします。

テスト:

@Test 
    public void testLocalDateTime() throws Exception { 

     DateTimeFormatter formatter = 
       DateTimeFormatter.ofPattern("dd-MMM-yy", Locale.US); 

     Tcan1990 applicant = tcan1990Repository.findOne(new Tcan1990PK("000000009", 888067)); 

     assertEquals(LocalDateTime.parse("10-APR-90",formatter),applicant.getPymtDt()); 
    } 

答えて

2

大文字と小文字を区別しないフォーマッタを使用するようにテストケースを更新し、LocalDateTimeを取得するために日付の文字列をLocalDateに解析し、その日の開始時刻を設定します。

@Test 
public void testLocalDateTime() throws Exception { 

    DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy").toFormatter(Locale.US); 

    Tcan1990 applicant = tcan1990Repository.findOne(new Tcan1990PK("000000009", 888067)); 

    assertEquals(LocalDate.parse("10-APR-1990", formatter).atStartOfDay(), applicant.getPymtDt()); 

} 
+0

'applicant.getPymtDt()。atStartOfDay()'を追加できません。私はまだ同じエラーが発生しています。フィールドはLocalDateTIme – Drew1208

+0

atStartOfDay()を削除するコードを更新しました。あなたが渡している文字列に時間がありますか?アサーションは失敗するだろう。あなたは地元の日付の部分だけを主張しても大丈夫ですか? assertEquals(LocalDate.parse( "10-APR-1990"、フォーマッタ)、applicant.getPymtDt()。toLocalDate()); – Veeram

+0

私のIDEは '不自然な型LocalDateとLocalDateTime'を警告しています。java.lang.AssertionError: 期待通り:2008-02-08 実際:2008-02-08T00:00'と表示されています正常に動作していますが、構文解析を修正する必要があります – Drew1208

0

2つのこと:"10-Apr-90"

  • 月はキャメルケースにする必要があります。
  • 解析する時間がないため、LocalDateで、LocalDateTimeではありません。
+1

ほとんどの場合、ユーザーは入力の正確な形式を制御することはできませんが、入力と一致するようにフォーマッタを調整する必要があります。したがって、あなたの最初のアドバイスは多かれ少なかれ無意味です。ストリングの前処理も何でもお勧めしない限り、 –

+0

非常に真です。しかし、これはハードコードされた文字列だったので、私は答えがこの特定の問題に関連していると思います。 –

関連する問題