时间格式问题总结
常用的注解
@JsonFormat
、@JsonSerialize
、@DateTimeFormat
页面需要时间戳时
如果不是 Mybatis 中的
resultMap
类型查出来的内容 那么需要使用@JsonSerialize
对实体类时间字段进行限制
-
如果查询出来的时候使用的
resultType
那么实体中的字段会被框架默认的格式转换,就得不到时间戳格式/** * 在相关属性上添加 @JsonSerialize(using = DateToLongSerializer.class) * 其中DateToLongSerializer是自定义的转换方法 * **/ public class Test{ @JsonSerialize(using = DateToLongSerializer.class) @Column(name = "CPR_RecordTime") private Date cprRecordtime; } //******************************************************************** 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; /** * @ClassName: DateToLongSerializer * @Description: 重写jackson对时间的序列化 * @Author: yjg * @Date: 2020/8/17 11:07 * @Version: 1.0 **/ public class DateToLongSerializer extends JsonSerializer<Date> { @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeNumber(date.getTime()); } }
页面需要 YYYY-MM-dd HH:mm:ss 格式
很多时候被默认序列化后的时间,可能不和IE兼容,要么带了 T 要么 末尾多了.0 之类的,此时需要对时间进行特殊处理
-
直接从数据库查出json格式的字符串时,在数据库层面上对时间进行处理
例如 sqlserver :
CONVERT(varchar(100), dateTemp[时间字段的名称], 20)
-
使用对象传递返回值的时候,可以通过实体类上添加注解实现
接收参数时需要转换特定格式的[就是后台接收前台参数时]
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") //属性或者set上使用
传递参数时需要转换特定格式的[就是后台传前台]
//设置时区为上海时区,时间格式自己据需求定。 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") //属性或者get上使用
如果项目时间格式要求都是统一的那么可以直接在配置文件中限制时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
#返回时间戳 spring jackson: serialization: write-dates-as-timestamps: true