当前位置:   article > 正文

springboot时间格式转换(前后端时间格式处理)_springboot中将前段long类型转换成date的注解

springboot中将前段long类型转换成date的注解

1.string转成date : 从前端得到的时间格式一般是string字符串,而后台需要date类型进行一些时间范围查询操作,因此DTO类一般是以date类型接受的:

  1. import com.fasterxml.jackson.core.JsonParser;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.DeserializationContext;
  4. import com.fasterxml.jackson.databind.JsonDeserializer;
  1. //string格式转换类
  2. public class JsonStringToDateDeserializer extends JsonDeserializer<Date> {
  3. /**
  4. * 时间戳正则
  5. */
  6. private static final String TIME_REGEX="[0-9]{13}";
  7. private static final String SPECIAL_TIME_SIGN = "T";
  8. @Override
  9. public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
  10. String dateStr = jp.getText();
  11. try {
  12. if (!Strings.isNullOrEmpty(dateStr)) {
  13. if (Pattern.compile(TIME_REGEX).matcher(dateStr).matches()) {
  14. return new Date(Long.parseLong(dateStr));
  15. } else {
  16. return stringToDate(dateStr);
  17. }
  18. }
  19. return null;
  20. } catch (ParseException e) {
  21. throw new RuntimeException(e);
  22. }
  23. }
  1. private Date stringToDate(String str) throws ParseException {
  2. if(Strings.isNullOrEmpty(str)){
  3. return null;
  4. }
  5. //特殊格式(2018-05-19T08:04:52.000+0000)解决,若有时区问题,@JsonFormat(timezone=“GMT+8”)注解属性
  6. if(str.indexOf(SPECIAL_TIME_SIGN) != -1){
  7. str = str.replace(SPECIAL_TIME_SIGN," ").substring(0,str.indexOf("."));
  8. }
  9. // 1、yyyy-MM-dd格式时间校验:
  10. String regex1 = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|" +
  11. "((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
  12. "((0[48]|[2468][048]|[3579][26])00))-02-29)$";
  13. //2、yyyy-MM-dd HH:mm:ss格式时间校验:
  14. String regex2 = "((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|" +
  15. "((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
  16. "((0[48]|[2468][048]|[3579][26])00))-02-29))" +
  17. "\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
  18. //3、yyyy/MM/dd格式时间校验:
  19. String regex3 = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\\/(((0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))|" +
  20. "((0[469]|11)\\/(0[1-9]|[12][0-9]|30))|(02\\/(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
  21. "((0[48]|[2468][048]|[3579][26])00))\\/02\\/29)$";
  22. // 4、yyyy/MM/dd HH:mm:ss格式时间校验:
  23. String regex4 = "((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\\/(((0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))|" +
  24. "((0[469]|11)\\/(0[1-9]|[12][0-9]|30))|(02\\/(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
  25. "((0[48]|[2468][048]|[3579][26])00))\\/02\\/29))" +
  26. "\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
  27. //5. 2017-12-31T16:00:00.000+0000
  28. String regex5 = "";
  29. if(str.matches(regex1)){
  30. SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
  31. return format1.parse(str);
  32. }else if (str.matches(regex2)){
  33. SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  34. return format2.parse(str);
  35. }else if (str.matches(regex3)){
  36. SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM/dd");
  37. return format3.parse(str);
  38. }else if (str.matches(regex4)){
  39. SimpleDateFormat format4 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  40. return format4.parse(str);
  41. }else {
  42. throw new RuntimeException("传入的日期:"+str+",格式不支持");
  43. }
  44. }

 

  1. import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
  2. import com.paic.icore.aaas.common.utils.json.JsonStringToDateDeserializer;

//dto

  1. public class PolicyDTO{
  2. private Date insuranceBeginDate;
  1. public Date getInsuranceBeginDate() {
  2. return insuranceBeginDate;
  3. }
  4. //注解转换的地方
  5. @JsonDeserialize(using = JsonStringToDateDeserializer.class)
  6. public void setInsuranceBeginDate(Date insuranceBeginDate) {
  7. this.insuranceBeginDate = insuranceBeginDate;
  8. }

}

 

2.时间date 转long类型 : 后端接受的时间格式一般是date类型封装dto的,如果直接传给前端,会出现

2018-05-19T08:04:52.000+0000这种格式,难以处理,所以通常我们处理成long类型
  1. import com.fasterxml.jackson.core.JsonGenerator;
  2. import com.fasterxml.jackson.databind.JsonSerializer;
  3. import com.fasterxml.jackson.databind.SerializerProvider;
  4. import java.io.IOException;
  5. import java.util.Date;
  6. //时间处理类
  7. public class JsonDateToLongSerializer extends JsonSerializer<Date>{
  8. /**
  9. *
  10. * 功能描述: 日期转换(data转换long)
  11. *
  12. * @param date
  13. * @param gen
  14. * @param serializers
  15. * @return:
  16. * @auther: EX-SUMIN001
  17. * @date: 2019/03/04 19:36
  18. * @throws IOException
  19. */
  20. @Override
  21. public void serialize(Date date, JsonGenerator gen, SerializerProvider serializers) throws IOException {
  22. //精确到毫秒,若到秒除1000
  23. gen.writeNumber(date.getTime());
  24. }
  25. }

//dto

  1. package com.paic.icore.aaas.api.vo;
  2. import com.fasterxml.jackson.annotation.JsonInclude;
  3. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  4. import com.paic.icore.aaas.common.utils.json.JsonDateToLongSerializer;
  5. import java.util.Date;
  6. import java.util.List;
  7. public class RoleInfoVO{
  1. /**
  2. * 创建时间
  3. */
  4. private Date createdDate;
  1. public Date getCreatedDate() {
  2. return createdDate;
  3. }
  4. //引用注解地方
  5. @JsonSerialize(using = JsonDateToLongSerializer.class)
  6. public void setCreatedDate(Date createdDate) {
  7. this.createdDate = createdDate;
  8. }
}
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/692597
推荐阅读
相关标签
  

闽ICP备14008679号