2017-03-02 6 views
0

これまでのところ文字列を解析するコードを使用していますが、間違った方法でmysqlデータベースに間違った形式で記録されました。次のような私の日付のフォーマットがJavaでフォーマットされていません

コード:

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
    System.out.println(new java.sql.Date(dateFormat.parse("2017-10-20").getTime())); 

出力:

0026-04-09 

私は、文字列0026のうち、2017年10月20日を取得することを逆にする方法を疑問に思います-04-09

+1

代わりに日付形式を 'yyyy-MM-dd'に切り替えるのはなぜですか? –

+0

は0026-04-09の日付でそれを試しました、それはまた、また04-04-09を与えます、問題は私が他の日付のために記録したものを逆転しようとしていることです – CriminalDuck

+0

あなたは '0026-04-09'を持っていますあなたのデータベースは今、 '2017-10-20'に戻したいのですか?それは文字列または日付として格納されていますか?私は防弾方法があるかどうかはわかりませんが、いくつかの情報があればわかりやすく伝えることができます。 –

答えて

1

私は最も安全で最も複雑でない方法は、データベース内に存在する可能性のあるすべての日付の計算を再度実行します。それから彼らは何を得ているのかを知っているので、あなたはその日が何であったのかに戻ることができます。間違った日付(DateまたはStringなど)から地図にマップして、それがあったはずだった場所にマップします。私は

import java.sql.Date; 

を使用しています

私もjava.timeからLocalDateMonthを使用しています - これらは、Java 7を使用している場合は、代わりにjava.util.Calendarを使用できるJava 8を必要としています。コードの例 - ニーズに合わせて調整する:選択した日付の

DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
    Map<Date, Date> corrections = new HashMap<>(5500); // capacity for 11 years 
    LocalDate endDate = LocalDate.of(2020, Month.DECEMBER, 31); 
    LocalDate currentDate = LocalDate.of(2010, Month.JANUARY, 1); 

    do { 
     Date correctDate = Date.valueOf(currentDate); 
     String correctString = correctDate.toString(); 
     Date wrongDate = new Date(dateFormat.parse(correctString).getTime()); 

     if (corrections.containsKey(wrongDate)) { 
      System.out.println("Duplicate wrong date " + wrongDate); 
     } 

     corrections.put(wrongDate, correctDate); 

     currentDate = currentDate.plusDays(1); 
    } while (! currentDate.isAfter(endDate)); 

、2010年から2020年までの間隔内で、我々は戻って変換することができますので、上記のコードを実行すると、印刷しようとするDuplicate wrong dateラインをはありません明白に。安堵ですね。

今あなたがマップを構築している、ルックアップは例えば、簡単です:

Date wrongDate = new Date(dateFormat.parse("2017-10-20").getTime()); // 0026-04-09 
    Date correctDate = corrections.get(wrongDate); 
    if (correctDate == null) { 
     System.out.println("Could not find correction for " + wrongDate); 
    } else { 
     System.out.println(correctDate); 
    } 

これは印刷したい:

2017-10-20 

あなたがわから取得しないようにしたいでしょうnullを入力してから、データベースに値を戻してください。

最新のJDBCドライバを使用している場合は、上記のコードでjava.sql.Dateを避けて、最新のLocalDateと友だちをすべて使用する必要があります。

+0

ありがとうございました!それは私のために働く – CriminalDuck

関連する問題