前后端时间格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前后端时间格式相关的知识,希望对你有一定的参考价值。

参考技术A

前端传毫秒
1、不加@JsonFormat
前端:1517191582000(毫秒)
后台:private Date trialTime;
列表返回的时间格式:毫秒
2、加@JsonFormat
① @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
前端:1517191582000(毫秒)
后台:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date trialTime;
列表返回的时间格式:yyyy-MM-dd HH:mm:ss

② @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
前端:1517191582000(毫秒)
后台:
@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
private Date trialTime;
列表返回的时间格式:yyyy-MM-dd

前端传"2018-01-03T02:01:13.678Z"
1、不加@JsonFormat
前端:"2018-01-03T02:01:13.678Z"
后台:private Date trialTime;
列表返回的时间格式:毫秒
2、加@JsonFormat
① 不支持"yyyy-MM-dd HH:mm:ss"这种格式
② 支持"yyyy-MM-dd"这种格式
前端:"2018-01-03T02:01:13.678Z"
后台:
@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
private Date trialTime;
列表返回的时间格式:yyyy-MM-dd

前端传"yyyy-MM-dd HH:mm:ss"
1、不加@JsonFormat报错
2、加@JsonFormat
① 支持"yyyy-MM-dd HH:mm:ss"这种格式
前端:"yyyy-MM-dd HH:mm:ss"
后台:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date trialTime;
列表返回的时间格式:yyyy-MM-dd HH:mm:ss
② 不支持"yyyy-MM-dd"这种格式,因为前端传的时间格式已经限定死了

前端传"yyyy-MM-dd"
1、不加@JsonFormat (注:get请求,但是是用@RequestParam Map formData接收的,所以不影响。见贵安项目ArticleListControl中articleInfo接口)
前端:"yyyy-MM-dd"
后台:private Date trialTime;
列表返回的时间格式:毫秒
2、加@JsonFormat
① 不支持"yyyy-MM-dd HH:mm:ss"这种格式
② 支持"yyyy-MM-dd"这种格式
前端:"yyyy-MM-dd"
后台:
@JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
private Date trialTime;
列表返回的时间格式:yyyy-MM-dd

总结
Jackson不支持这种时间格式的:yyyy-MM-dd HH:mm:ss,试了一下,果然报错来了
Can not construct instance of java.util.Date from String value \'2015-12-22 10:10:10\': not a valid representation (error: Failed to parse Date value \'2015-12-22 10:10:10\': Can not parse date "2015-12-22 10:10:10": not compatible with any of standard forms ("yyyy-MM-dd\'T\'HH:mm:ss.SSSZ", "yyyy-MM-dd\'T\'HH:mm:ss.SSS\'Z\'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
看提示好像只支持这几种:
"yyyy-MM-dd\'T\'HH:mm:ss.SSSZ", "yyyy-MM-dd\'T\'HH:mm:ss.SSS\'Z\'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"

主要看前端到→后台是否需要序列化
get请求时
① 后台用 @ModelAttribute T model 方式接收前端数据,会把传进来的参数序列化成对象T,前端传的参数有一个是String类型的 2018-12-25 时间,但是对象T中是date类型,所以如果不做转换的话会报400错误,在对象T的对应参数上加 @DateTimeFormat(pattern = "yyyy-MM-dd") 。通过@DateTimeFormat这个日期格式化注解,就可以将前端传入的字符串格式化为日期类型可以识别的内容信息了。当然也可以使用@DateTimeFormat(iso=ISO.DATE)这样子的格式化来进行处理,效果是一样的。JsonFormat适用于json方式?

② 如果后台用 @RequestParam Map formData 接收前端参数的话,即使前端传的时间是 yyyy-MM-dd 方式也不会报错,因为Map可以接收任意类型的参数

post请求时
因为post请求是用 @RequestBody

@JsonFormat与@DateTimeFormat注解的使用

以上是关于前后端时间格式的主要内容,如果未能解决你的问题,请参考以下文章

前后端传输数据的编码格式(contentType)

前后端传输数据的编码格式(contentType)

编码格式分类: 前后端传递数据的编码格式contentType

前后端传输数据的编码格式(contentType)

前后端传输数据的编码格式(contentType)

前后端分离,转json格式问题