在Spring 3.0中作为Formatter SPI的一部分引入的@DateTimeFormat批注可用于解析和打印Web应用程序中的本地化字段值。 在Spring 4.0中, @DateTimeFormat批注可以直接与Java 8 Date-Time API( java.time )一起使用。
在Spring中,可以通过字段类型或注释来配置字段格式。 要将注释绑定到格式化程序,必须实现AnnotationFormatterFactory 。 Spring 4.0 Jsr310DateTimeFormatAnnotationFormatterFactory了Jsr310DateTimeFormatAnnotationFormatterFactory ,该Jsr310DateTimeFormatAnnotationFormatterFactory格式化了以@DateTimeFormat注释的Java 8 Date-Time字段。 支持的字段类型如下:
-
java.util.LocalDate -
java.util.LocalTime -
java.util.LocalDateTime -
java.util.ZonedDateTime -
java.util.OffsetDateTime -
java.util.OffsetTime
可以采用以下形式使用所有提到的类型:
public class DatesForm {@DateTimeFormat(iso = ISO.DATE)private LocalDate localDate;@DateTimeFormat(iso = ISO.TIME)private LocalTime localTime;@DateTimeFormat(iso = ISO.TIME)private OffsetTime offsetTime;@DateTimeFormat(iso = ISO.DATE_TIME)private LocalDateTime localDateTime;@DateTimeFormat(iso = ISO.DATE_TIME)private ZonedDateTime zonedDateTime;@DateTimeFormat(iso = ISO.DATE_TIME)private OffsetDateTime offsetDateTime;}表单可以传递给视图,Spring会照顾字段的正确格式。
在类型字段上指定格式时: java.util.LocalDate , java.util.LocalTime , java.util.OffsetTime您需要记住正确配置@DateTimeFormat 。
@DateTimeFormat声明字段应设置为日期时间,并且因为java.util.LocalDate表示日期,而其他两个表示时间–您将获得java.time.temporal.UnsupportedTemporalTypeException (例如:不支持的字段:ClockHourOfAmPm,不支持字段:java.time.format.DateTimeFormatter抛出的java.time.format.DateTimeFormatter 。
翻译自: https://www.javacodegeeks.com/2014/06/spring-4-datetimeformat-with-java-8-date-time-api.html