2017-03-02 2 views
0

문자열을 파싱하는 데 코드를 사용하고 있습니다. 잘못된 방식으로 작성했기 때문에 잘못된 형식으로 mysql 데이터베이스에 기록되었습니다. 코드 : 다음과 같은자바로 내 날짜 형식을 엉망으로 만들었습니다

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 날짜에 시도했는데, 또한 0026-04-09를 제공합니다. 문제는 제가 다른 날짜에도 기록한 것을 뒤집어 쓰려고하는 것입니다. – CriminalDuck

+0

그래서 '0026-04-09'가 있습니다. 지금 데이터베이스를 수정하고 '2017-10-20'으로 다시 수정 하시겠습니까? 그 문자열 또는 날짜로 저장되어 있습니까? 나는 방탄 방법이 있는지 확신하지 못한다. 그러나 더 많은 정보를 가지고 우리는 더 잘 말할 수있다. –

답변

1

나는 가장 안전하고 복잡하지 않은 방법은 wro을하는 것이라고 생각합니다. 데이터베이스에있을 수있는 모든 날짜에 대해 다시 계산하십시오. 그렇다면 당신은 그들이 무엇을 낳는지를 알게되고, 당신은 그 날짜가 무엇이었을지를 돌아볼 수있게 될 것입니다. 지도를 사용하여 잘못된 날짜 (Date 또는 String 등)에서 발생한 날짜로 매핑해야합니다. 내가

import java.sql.Date; 

을 사용하고

또한 java.time에서 LocalDateMonth을 사용하고 -이 자바 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 및 친구를 모두 사용할 수 있어야합니다.

+0

정말 고마워요! 그것은 나를 위해 일한다. – CriminalDuck

관련 문제