복붙노트

[SPRING] Spring 3.2 날짜 시간 형식

SPRING

Spring 3.2 날짜 시간 형식

독립형 Spring 프레임 워크를 사용 중이고 Spring 3.2 @DateTimeFormat (pattern = "dd / mm / yyyy")를 구현하려고하지만 예상되는 출력을 얻지는 않습니다.

내 코드 스 니펫은 다음과 같습니다.

    @DateTimeFormat(pattern = "dd/mm/yyyy")
      private Date dob;


    public void  amehotd(){

    Calendar cal;
      cal = Calendar.getInstance ();
          cal.set (1999, Calendar.AUGUST, 30);
          this.dob = cal.getTime();
          System.out.println(dob)    
    }

결과는 다음과 같습니다.

Mon Aug 30 15:08:14 CDT 1999 

하지만 나는 다음과 같이 출력을 기대하고 있었다 : 30/08/1999

joda 시간 라이브러리없이 구현하고 싶습니다.

해결법

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

    1.형식을 다음과 같이 변경해보십시오.

    형식을 다음과 같이 변경해보십시오.

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    

    MM은 몇 개월, mm은 분입니다.

    이 문서를보십시오 :

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

    2.나는 그것이 낡은 질문이라는 것을 알고 있지만, 오늘 같은 문제가 있었기 때문에 대답하고 해결책을 찾기 위해 4 시간의 작업을 잃어 버렸습니다. JSON을 serialize 및 deserialize하기 위해 Spring은 Jackson을 사용합니다. @DateTimeFormat 주석은 작업을 수행하지 않으므로 Jackson에게 날짜를 serialize하는 방법을 알려줘야합니다. 두 가지 해결책이 있습니다 : 첫 번째는 더 간단하고 getter 메서드에서 @JsonFormat 주석을 사용하는 것입니다.

    나는 그것이 낡은 질문이라는 것을 알고 있지만, 오늘 같은 문제가 있었기 때문에 대답하고 해결책을 찾기 위해 4 시간의 작업을 잃어 버렸습니다. JSON을 serialize 및 deserialize하기 위해 Spring은 Jackson을 사용합니다. @DateTimeFormat 주석은 작업을 수행하지 않으므로 Jackson에게 날짜를 serialize하는 방법을 알려줘야합니다. 두 가지 해결책이 있습니다 : 첫 번째는 더 간단하고 getter 메서드에서 @JsonFormat 주석을 사용하는 것입니다.

    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd/MM/yyyy")
    public Date getDob(){
        return dob;
    }
    

    두 번째 해결 방법은 다음과 같이 날짜 필드에 대한 사용자 지정 serializer를 만드는 것입니다.

    public class JsonDateSerializer extends JsonSerializer<Date>{
    
        private static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    
        @Override
        public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
                throws IOException, JsonProcessingException {
    
            String formattedDate = dateFormat.format(date);
    
            gen.writeString(formattedDate);
        }
    } 
    

    get 메소드에서 주석을 사용하십시오.

    @JsonSerialize(using=JsonDateSerializer.class)
    public Date getDob(){
       return dob; 
    }
    

    이 링크는 시리얼 라이저를 수행하는 방법을 설명합니다.

    https://dzone.com/articles/how-serialize-javautildate

    다른 문제가 생겼습니다. org.codehaus.jackson 패키지의 클래스를 JsonDateSerializer 클래스에서 가져 왔지만 Spring에서이 오류를 받았습니다.

    java.io.FileNotFoundException: class path resource [org/codehaus/jackson/map/JsonSerializer.class] cannot be opened because it does not exist
    

    그래서 나는 모든 수입을 포장으로 바꿨다.

    com.fasterxml.jackson
    

    그리고 그것은 모두 잘 작동합니다. 나는 그것이 누군가를 도울 수 있기를 바랍니다.

  3. ==============================

    3.클래스의 메서드에서 System.out.println을 직접 호출하고 있습니다. 그렇게하면 작동하지 않습니다.

    클래스의 메서드에서 System.out.println을 직접 호출하고 있습니다. 그렇게하면 작동하지 않습니다.

    클래스 외부에서 dob 필드를 호출해야합니다 (예 : JSP 페이지). 그러면 필드는 자동으로 주어진 패턴으로 포맷됩니다.

  4. ==============================

    4.@NumberFormat과 @DateTimeFormat 주석은 Spring MVC 환경에서만 작동한다. 당신은 XML mvc 구성 파일에서.

    @NumberFormat과 @DateTimeFormat 주석은 Spring MVC 환경에서만 작동한다. 당신은 XML mvc 구성 파일에서.

  5. ==============================

    5.수업 시간에 수입품을 살펴보십시오. 날짜 유형은 java.util.Date 여야합니다. java.sql.Date와 같은 다른 클래스에서 상속 될 수 있습니다.

    수업 시간에 수입품을 살펴보십시오. 날짜 유형은 java.util.Date 여야합니다. java.sql.Date와 같은 다른 클래스에서 상속 될 수 있습니다.

  6. from https://stackoverflow.com/questions/17754849/spring-3-2-date-time-format by cc-by-sa and MIT license