赞
踩
1.string转成date : 从前端得到的时间格式一般是string字符串,而后台需要date类型进行一些时间范围查询操作,因此DTO类一般是以date类型接受的:
- import com.fasterxml.jackson.core.JsonParser;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.DeserializationContext;
- import com.fasterxml.jackson.databind.JsonDeserializer;
- //string格式转换类
- public class JsonStringToDateDeserializer extends JsonDeserializer<Date> {
-
- /**
- * 时间戳正则
- */
- private static final String TIME_REGEX="[0-9]{13}";
- private static final String SPECIAL_TIME_SIGN = "T";
-
- @Override
- public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
- String dateStr = jp.getText();
- try {
- if (!Strings.isNullOrEmpty(dateStr)) {
- if (Pattern.compile(TIME_REGEX).matcher(dateStr).matches()) {
- return new Date(Long.parseLong(dateStr));
- } else {
- return stringToDate(dateStr);
- }
- }
- return null;
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
- }

private Date stringToDate(String str) throws ParseException { if(Strings.isNullOrEmpty(str)){ return null; } //特殊格式(2018-05-19T08:04:52.000+0000)解决,若有时区问题,@JsonFormat(timezone=“GMT+8”)注解属性 if(str.indexOf(SPECIAL_TIME_SIGN) != -1){ str = str.replace(SPECIAL_TIME_SIGN," ").substring(0,str.indexOf(".")); } // 1、yyyy-MM-dd格式时间校验: 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]))|" + "((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])|" + "((0[48]|[2468][048]|[3579][26])00))-02-29)$"; //2、yyyy-MM-dd HH:mm:ss格式时间校验: 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]))|" + "((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])|" + "((0[48]|[2468][048]|[3579][26])00))-02-29))" + "\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; //3、yyyy/MM/dd格式时间校验: 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]))|" + "((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])|" + "((0[48]|[2468][048]|[3579][26])00))\\/02\\/29)$"; // 4、yyyy/MM/dd HH:mm:ss格式时间校验: 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]))|" + "((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])|" + "((0[48]|[2468][048]|[3579][26])00))\\/02\\/29))" + "\\s([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; //5. 2017-12-31T16:00:00.000+0000 String regex5 = ""; if(str.matches(regex1)){ SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); return format1.parse(str); }else if (str.matches(regex2)){ SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format2.parse(str); }else if (str.matches(regex3)){ SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM/dd"); return format3.parse(str); }else if (str.matches(regex4)){ SimpleDateFormat format4 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); return format4.parse(str); }else { throw new RuntimeException("传入的日期:"+str+",格式不支持"); } }
- import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
- import com.paic.icore.aaas.common.utils.json.JsonStringToDateDeserializer;
//dto
- public class PolicyDTO{
-
- private Date insuranceBeginDate;
- public Date getInsuranceBeginDate() {
- return insuranceBeginDate;
- }
-
- //注解转换的地方
- @JsonDeserialize(using = JsonStringToDateDeserializer.class)
- public void setInsuranceBeginDate(Date insuranceBeginDate) {
- this.insuranceBeginDate = insuranceBeginDate;
- }
}
2.时间date 转long类型 : 后端接受的时间格式一般是date类型封装dto的,如果直接传给前端,会出现
2018-05-19T08:04:52.000+0000这种格式,难以处理,所以通常我们处理成long类型
- import com.fasterxml.jackson.core.JsonGenerator;
- import com.fasterxml.jackson.databind.JsonSerializer;
- import com.fasterxml.jackson.databind.SerializerProvider;
-
- import java.io.IOException;
- import java.util.Date;
-
- //时间处理类
- public class JsonDateToLongSerializer extends JsonSerializer<Date>{
-
- /**
- *
- * 功能描述: 日期转换(data转换long)
- *
- * @param date
- * @param gen
- * @param serializers
- * @return:
- * @auther: EX-SUMIN001
- * @date: 2019/03/04 19:36
- * @throws IOException
- */
- @Override
- public void serialize(Date date, JsonGenerator gen, SerializerProvider serializers) throws IOException {
- //精确到毫秒,若到秒除1000
- gen.writeNumber(date.getTime());
- }
-
- }

//dto
- package com.paic.icore.aaas.api.vo;
-
- import com.fasterxml.jackson.annotation.JsonInclude;
- import com.fasterxml.jackson.databind.annotation.JsonSerialize;
- import com.paic.icore.aaas.common.utils.json.JsonDateToLongSerializer;
-
- import java.util.Date;
- import java.util.List;
-
- public class RoleInfoVO{
- /**
- * 创建时间
- */
- private Date createdDate;
- public Date getCreatedDate() {
- return createdDate;
- }
- //引用注解地方
- @JsonSerialize(using = JsonDateToLongSerializer.class)
- public void setCreatedDate(Date createdDate) {
- this.createdDate = createdDate;
- }
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。