나는 가장 안전하고 복잡하지 않은 방법은 wro을하는 것이라고 생각합니다. 데이터베이스에있을 수있는 모든 날짜에 대해 다시 계산하십시오. 그렇다면 당신은 그들이 무엇을 낳는지를 알게되고, 당신은 그 날짜가 무엇이었을지를 돌아볼 수있게 될 것입니다. 지도를 사용하여 잘못된 날짜 (Date
또는 String
등)에서 발생한 날짜로 매핑해야합니다. 내가
import java.sql.Date;
을 사용하고
또한 java.time
에서 LocalDate
및 Month
을 사용하고 -이 자바 8.이 필요 당신이 자바 7을 사용하는 경우, 대신 java.util.Calendar
를 사용할 수 있습니다. 코드 예제 - 사용자의 요구에 맞게 수 : 선택한 날짜와
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));
, 위의 코드를 실행 하지 원인 원인 Duplicate wrong date
라인이 인쇄 될 않습니다, 우리는 다시 변환 할 수 있습니다 2020-2010에서 간격 내에 있도록 모호하지 않게. 안도, 안 그래?
이제지도를 구축, 조회, 예를 들어, 쉽게 :
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
및 친구를 모두 사용할 수 있어야합니다.
왜 대신 날짜 형식을 'yyyy-MM-dd'로 바꾸시겠습니까? –
는 0026-04-09 날짜에 시도했는데, 또한 0026-04-09를 제공합니다. 문제는 제가 다른 날짜에도 기록한 것을 뒤집어 쓰려고하는 것입니다. – CriminalDuck
그래서 '0026-04-09'가 있습니다. 지금 데이터베이스를 수정하고 '2017-10-20'으로 다시 수정 하시겠습니까? 그 문자열 또는 날짜로 저장되어 있습니까? 나는 방탄 방법이 있는지 확신하지 못한다. 그러나 더 많은 정보를 가지고 우리는 더 잘 말할 수있다. –