package com.greatmap.zrzy.nrm.config;
import org.apache.commons.lang.StringUtils;
import 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 implements Converter<String, Timestamp> { // 这里的<String, Timestamp>表示从string转换到timestamp
static final String YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
static final String 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}";
static final String YYYY_MM_DD_HH_MM_SS_S = "yyyy-MM-dd HH:mm:ss.S";
static final String 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}";
static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
static final String 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}";
static final String YYYY_MM_DD = "yyyy-MM-dd";
static final String REG_YYYY_MM_DD = "[0-9]{4}[-]{1}[0-9]{2}[-]{1}[0-9]{2}";
static final String REG_NUMBER = "[0-9]{1,}";
@Override
public Timestamp convert(String timeStr) {
if(StringUtils.isBlank(timeStr)) {
return null;
}
timeStr = timeStr.trim();
try {
DateTimeFormatter formatter;
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);
} else if(Pattern.matches(StringToTimestampConverter.REG_YYYY_MM_DD, timeStr)) {
formatter = DateTimeFormatter.ofPattern(YYYY_MM_DD);
LocalDate localDate = LocalDate.parse(timeStr, formatter);
Instant instant = localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Timestamp timestamp = Timestamp.from(instant);
return timestamp;
} else if(Pattern.matches(StringToTimestampConverter.REG_NUMBER, timeStr)) {
Long lDate = new Long(timeStr);
return new Timestamp(lDate);
} else {
throw new RuntimeException(String.format("parser %s to Date fail", timeStr));
}
LocalDateTime localDateTime = LocalDateTime.parse(timeStr, formatter);
Timestamp timestamp = Timestamp.valueOf(localDateTime);
return timestamp;
} catch (Exception e) {
throw new RuntimeException(String.format("parser %s to Date fail", timeStr));
}
}
}
springboot全局配置将string类型转换成时间戳返回
最新推荐文章于 2023-05-13 16:39:21 发布