1. Establezca la conversión de cadena global a la clase de conversión de marca de tiempo
import org.apache.commons.lang.StringUtils; importar org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.sql.Timestamp; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; @Component public class StringToTimestampConverter implementa Converter <String, Timestamp> { //的 的 <String, Timestamp> 表示 从 string 转换 到 timestamp static final String YYYY_MM_DD_HH_MM_SS_SSS = "aaaa-MM-dd HH: mm: ss.SSS" ; Cadena estática final REG_YYYY_MM_DD_HH_MM_SS_SSS = "[0-9] {4} [-] {1} [0-9] {2} [-] {1} [0-9] {2} [] {1} [0- 9] {2} [:] {1} [0-9] {2} [:] {1} [0-9] {2} [.] {1} [0-9] {3} " ; Cadena estática final AAAA_MM_DD_HH_MM_SS_S = "aaaa-MM-dd HH: mm: ss.S" ; Cadena estática final REG_YYYY_MM_DD_HH_MM_SS_S = "[0-9] {4} [-] {1} [0-9] {2} [-] {1} [0-9] {2} [] {1} [0- 9] {2} [:] {1} [0-9] {2} [:] {1} [0-9] {2} [.] {1} [0-9] {1} " ; Cadena estática final AAAA_MM_DD_HH_MM_SS = "aaaa-MM-dd HH: mm: ss" ; Cadena REG_YYYY_MM_DD_HH_MM_SS = "[0-9] {4} [-] {1} [0-9] {2} [-] {1} [0-9] {2} [] {1} [0-9] {2} [:] {1} [0-9] {2} [:] {1} [0-9] {2} " ; Cadena estática final AAAA_MM_DD = "aaaa-MM-dd" ; Cadena estática final REG_YYYY_MM_DD = "[0-9] {4} [-] {1} [0-9] {2} [-] {1} [0-9] {2}" ; Cadena estática final REG_NUMBER = "[0-9] {1,}" ; @Override public Timestamp convert (String timeStr) { if (StringUtils.isBlank (timeStr)) { return null ; } timeStr = timeStr.trim (); tratar { Formateador DateTimeFormatter; if (Pattern.matches (StringToTimestampConverter.REG_YYYY_MM_DD_HH_MM_SS_SSS, timeStr)) { formatter = DateTimeFormatter.ofPattern (YYYY_MM_DD_HH_MM_SS_SSS); } else if (Pattern.matches (StringToTimestampConverter.REG_YYYY_MM_DD_HH_MM_SS_S, timeStr)) { formatter = DateTimeFormatter.ofPattern (YYYY_MM_DD_HH_MM_SS_S); } else if (Pattern.matches (StringToTimestampConverter.REG_YYYY_MM_DD_HH_MM_SS, timeStr)) { formatter = DateTimeFormatter.ofPattern (YYYY_MM_DD_HH_MM_SS); }sino if (Pattern.matches (StringToTimestampConverter.REG_YYYY_MM_DD, timeStr)) { formatter = DateTimeFormatter.ofPattern (YYYY_MM_DD); LocalDate localDate = LocalDate.parse (timeStr, formatter); Instantáneo instantáneo = localDate.atStartOfDay (). AtZone (ZoneId.systemDefault ()). ToInstant (); Timestamp timestamp = Timestamp.from (instantáneo); marca de tiempo de retorno ; } else if (Pattern.matches (StringToTimestampConverter.REG_NUMBER, timeStr)) { Long lDate = newLargo (timeStr); devolver nueva marca de tiempo (lDate); } else { lanzar una nueva RuntimeException (String.format ("analizador% s hasta la fecha falla" , timeStr)); } LocalDateTime localDateTime = LocalDateTime.parse (timeStr, formatter); Timestamp timestamp = Timestamp.valueOf (localDateTime); marca de tiempo de retorno ; } catch (Exception e) { throw new RuntimeException (String.format ("analizador% s hasta la fecha falla" , timeStr)); } } }
2. Establezca la conversión de cadena global a la clase de conversión de fecha
import org.apache.commons.lang.StringUtils; importar org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.sql.Timestamp; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.regex.Pattern; @Component public class StringToUtilDateConverter implementa Converter <String, Date> { // 这里 的 <String, Date> 表示 从 string 转换 到 Date static Cadena final AAAA_MM_DD = "aaaa-MM-dd" ; Cadena estática final REG_YYYY_MM_DD = "[0-9] {4} [-] {1} [0-9] {2} [-] {1} [0-9] {2}" ; Cadena estática final REG_NUMBER = "[0-9] {1,}" ; @Override public Date convert (String timeStr) { if (StringUtils.isBlank (timeStr)) { return null ; } timeStr = timeStr.trim (); pruebe el formateador { DateTimeFormatter; if (Pattern.matches (StringToUtilDateConverter.REG_YYYY_MM_DD, timeStr)) { formateador= DateTimeFormatter.ofPattern (AAAA_MM_DD); } else if (Pattern.matches (StringToUtilDateConverter.REG_NUMBER, timeStr)) { Long lDate = new Long (timeStr); devolver nueva marca de tiempo (lDate); } else { lanzar una nueva RuntimeException (String.format ("analizador% s hasta la fecha falla" , timeStr)); } LocalDate localDate = LocalDate.parse (timeStr, formatter); Instantáneo instantáneo =localDate.atStartOfDay (). atZone (ZoneId.systemDefault ()). toInstant (); Fecha fecha = Fecha.from (instantáneo); fecha de regreso ; } catch (Exception e) { lanzar una nueva RuntimeException (String.format ("analizador% s hasta la fecha falla" , timeStr)); } } }
3. ¡Importante! El último paso, registre la clase de conversión en el contenedor de resorte.
import com.myapp.util.StringToTimestampConverter; import com.myapp.util.StringToUtilDateConverter; import org.springframework.beans.factory.annotation.Autowired; importar org.springframework.context.annotation.Configuration; importar org.springframework.core.convert.support.GenericConversionService; importar org.springframework.web.bind.support.ConfigurableWebBindingInitializer; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import javax.annotation.PostConstruct; @Configuration public class MyappConfigTimestampConverter { @Autowired private RequestMappingHandlerAdapter handlerAdapter; @Autowired private StringToTimestampConverter stringToTimestampConverter; @Autowired private StringToUtilDateConverter stringToUtilDateConverter; / ** * convierte una cadena en java.sql.Timestamp y otra fecha * / @PostConstruct public void initEditableAvlidation () { ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) handlerAdapter.getWebBindingInitializer (); if (initializer.getConversionService ()! = null ) { GenericConversionService genericConversionService = (GenericConversionService) initializer.getConversionService (); genericConversionService.addConverter (stringToTimestampConverter); genericConversionService.addConverter (stringToUtilDateConverter); } } }
final.