2013-07-19 20 views
8

Tôi đang sử dụng khung công tác độc lập Spring và tôi muốn triển khai Spring 3.2 @DateTimeFormat (pattern = "dd/mm/yyyy"), nhưng không nhận được kết quả mong đợi.Mùa xuân 3.2 Định dạng ngày tháng

đoạn mã của tôi là:

@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)  
    } 

Cho kết quả sau đây:

Mon Aug 30 15:08:14 CDT 1999 

nhưng tôi đã mong đợi đầu ra như: 30/08/1999

Tôi muốn thực hiện mà không cần thời gian Joda thư viện

+0

Làm thế nào để bạn "in" đầu ra đó? Tôi hỏi vì có vẻ như chú thích không được tính đến. – Ralph

+0

Tôi sẽ sử dụng API [Joda-time] (http://joda-time.sourceforge.net/) (vì nó luôn là sở thích của tôi) và chắc chắn không phải là API thời gian mặc định của Java SE. Nếu bạn đang sử dụng Spring 3.2, thì bạn có thể đăng ký trình chỉnh sửa thuộc tính tùy chỉnh trực tiếp với ['@ ControllerAdvice'] (http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework /web/bind/annotation/ControllerAdvice.html) để đáp ứng mọi thứ bạn cần. – Lion

Trả lời

15

Thử thay đổi định dạng thành:

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

MM là tháng, mm trong vài phút.

Chỉ cần nhìn vào documentation này:

The most common ISO DateTime Format yyyy-MM-dd'T'hh:mm:ss.SSSZ e.g.

+3

@DateTimeFormat (pattern = "dd/MM/yyyy") \t riêng Ngày dob; nhưng vẫn nhận được: Thứ Hai ngày 30 tháng 8 15:28:22 CDT 1999 – bekur

1

Bạn đang kêu gọi System.out.println trực tiếp trong một phương pháp lớp học của bạn. Điều này không thể làm việc theo cách đó.

Bạn phải gọi trường dob từ bên ngoài lớp học của mình, ví dụ: từ trang JSP. Và theo cách này, trường sẽ được định dạng tự động theo mẫu đã cho.

0

@NumberFormat và @DateTimeNhững chú thích chỉ hoạt động trong môi trường Spring MVC. Bạn phải sử dụng <mvc:annotation-driven/> trong tệp cấu hình mvc mvc của mình.

0

Hãy xem xét nhập khẩu của bạn trong lớp học của bạn. Loại ngày của bạn phải là java.util.Date. Nó có thể được kế thừa từ một lớp khác, chẳng hạn như, java.sql.Date.

5

Tôi biết đó là một câu hỏi cũ nhưng tôi trả lời vì tôi đã có cùng một vấn đề ngày hôm nay và tôi mất 4 giờ làm việc để tìm giải pháp. Vấn đề ở đây là mùa xuân sử dụng jackson để serialize và deserialize JSON. @DateTimeFormat chú thích sẽ không thực hiện công việc, bạn phải thông báo cho Jackson cách sắp xếp ngày tháng.Bạn có hai giải pháp: một trong những đầu tiên là đơn giản hơn và là sử dụng @JsonFormat chú thích trong phương thức getter:

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

Giải pháp thứ hai là để tạo ra một serializer tùy chỉnh cho trường ngày như thế này:

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); 
    } 
} 

và sau đó sử dụng các chú thích trong method get:

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

liên kết này giải thích làm thế nào để làm serializer

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

tôi phải đối mặt với một vấn đề khác, tôi đã nhập khẩu trong lớp JsonDateSerializer tôi các lớp từ org.codehaus.jackson gói, nhưng mùa xuân gived tôi lỗi này:

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

Vì vậy, tôi đã thay đổi tất cả các hàng nhập khẩu để gói

com.fasterxml.jackson 

và tất cả đều hoạt động tốt. Tôi hy vọng nó có thể giúp ai đó.