복붙노트

[SQL] "EEE MMM은 HH를 위해 dd : MM : SS의 ZZZ 일"로 날짜 형식 java.sql.Date

SQL

"EEE MMM은 HH를 위해 dd : MM : SS의 ZZZ 일"로 날짜 형식 java.sql.Date

내가 MySQL 데이터베이스에 삽입 할 수 있도록 YYYY-MM-DD 형식으로 SS의 ZZZ의 YYYY : mm : 나는 EEE MMM DD HH로 변환하려합니다. 나는 어떤 오류가 발생하지 않지만, 내 DB에 삽입 된 날짜는 잘못된 모든 행에 대해 동일합니다 ...

 String date = Sat Mar 04 09:54:20 EET 2017;
 SimpleDateFormat formatnow = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy"); 
 SimpleDateFormat formatneeded=new SimpleDateFormat("YYYY-MM-DD");

 java.util.Date date1 = (java.util.Date)formatnow.parse(date);
 String date2 = formatneeded.format(date1);
 java.util.Date date3= (java.util.Date)formatneeded.parse(date2);


 java.sql.Date sqlDate = new java.sql.Date( date3.getTime() );
 pst.setDate(1, sqlDate);

해결법

  1. ==============================

    1.

        LocalDate date4 = ZonedDateTime
                .parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
                .toLocalDate();
        java.sql.Date date5 = java.sql.Date.valueOf(date4);
    

    나는 java.time 패키지에 현대 클래스를 사용하고 있습니다. 당신이 새로운 클래스의 유창한 문체에 익숙해 일단 당신은 코드뿐만 아니라 간단 통지, 그것은 또한 명확하다.

    100 % 현대가되고 싶었 경우에는 최신 MySQL의 JDBC 드라이버가 java.sql.Date을 변환없이 직접 LOCALDATE을 허용하지 않는지 여부를 확인해야합니다. 그것은해야한다.

    노트에 대한 몇 가지 세부 사항

    당신이 DateTimeFormatter 또는하여 SimpleDateFormat을 사용하는 경우이 점에 상관없이 유효합니다.

    당신이 또는 권장 새로운 클래스로 이동하지 않으 수없는 경우, 코드의 수정은 다음과 같습니다

        SimpleDateFormat formatnow 
                = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); 
        SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");
    

    이이 세 글자 시간대 이름과 일치하도록 문서화되어 있기 때문에 나는 소문자 ZZZ 사용하고, 나는 대문자 ZZZ도 작동하는지 알고있다. 나는 로케일을 추가했습니다. 그리고 어쩌면 가장 중요한, 필요한 형식으로 나는 (월 일) DD에 YYYY (연도)와 DD (년의 일)에 YYYY (주 기반 년) 변경했습니다. 그 모든 편지는 문서에 있습니다.

  2. ==============================

    2.당신이 다음 코드 힘의 도움 아래 LOCALDATE으로 날짜를 변환 할 경우, 나는이 질문 java.sql.Date에 있지만 추가 정보로 관련이 알고 :

    당신이 다음 코드 힘의 도움 아래 LOCALDATE으로 날짜를 변환 할 경우, 나는이 질문 java.sql.Date에 있지만 추가 정보로 관련이 알고 :

    private LocalDate getLocalDate(String date){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss Z yyyy", Locale.getDefault());
            return LocalDate.parse(date, formatter);
        }
    

    당신이 LOCALDATE를 일단, 당신은 어떤 형식으로 변환 할 수 있습니다. 질문이 기대에 YYYY-MM-DD로 다음 바로 LOCALDATE 객체에 toString ()를 호출합니다.

        LocalDate curr = LocalDate.now();
        System.out.println(curr.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        System.out.println(curr.toString());
    

    그것은 "2019년 11월 20일"와 같은 날짜를 표시합니다.

    이 사람에게 도움이되기를 바랍니다.

  3. from https://stackoverflow.com/questions/43933597/eee-mmm-dd-hhmmss-zzz-yyyy-date-format-to-java-sql-date by cc-by-sa and MIT license