前后端时间格式化问题

后端是new Date(),在前端要显示成自己的格式,有两种解决方案:

1.jstl的fmt

<fmt:formatDate value="${comment.commentDate }" type="date" pattern="yyyy-MM-dd HH:mm"/>


2. 使用json,这里使用的是 Jackson,它是 SpringMvc  官方推荐结合的

我们可以有两种用法(我知道的),在对象属性上,或者在属性的 getter 方法上,如下代码所示:

增加到属性上:

/**更新时间 用户可以点击更新,保存最新更新的时间。**/

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

private Date updateTime;


增加到 getter 方法上:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

public Date getUpdateTime() {

    return updateTime;

}

以上结果输出都是一样的。这个没有什么好说明的。具体输出格式,自己调整 pattern 。


@JsonFormat 相差8小时问题:

上面直接这么使用,在我们中国来讲和我们的北京时间,会相差8个小时,因为我们是东八区(北京时间)。

所以我们在格式化的时候要指定时区(timezone ),代码如下:

**更新时间 用户可以点击更新,保存最新更新的时间。**/

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

private Date updateTime;

咱看看结果,我这个接口就是这么输出的:公安网备查询 ,以 http://www.sojson.com/api/gongan/sina.com.cn 为例。

{

    "data": {

        "id": "11000002000016",

        "sitename": "新浪网",

        "sitedomain": "sina.com.cn",

        "sitetype": "交互式",

        "cdate": "2016-01-21",

        "comtype": "企业单位",

        "comname": "北京新浪互联信息服务有限公司",

        "comaddress": "北京市网安总队",

        "updateTime": "2017-09-05 02:26:34" //看这...这里就是刚刚输出的。

    },

    "status": 200

}


注意问题:

@JsonFormat可以方便的格式化时间字段。

默认情况下Jackson将 java.util.Date 序列化为 epoch timestamp,并且时区使用的是 GMT标准时间,而非本地时区。

但这个注解看了下只在 Jackson2 才有。于是我陷入了Spring 版本和Jackson2的迷思中,一番折腾。

如果不想使用@JsonFormat注解,jackson-mapper-asl仍然可以使用1.x的版本,来搭配 Spring 3.x系列。

如果想使用@JsonFormat注解,需要将Spring升级到3.1.2以上。

并且要将Jackson的jar包更换为2.x系列的(和1.x系列相比,包名都换了)。


Jackson1.x时代,可以扩展JsonSerializer,来实现一个格式化时间的JsonDateSerializer,并在注解中引用这个类

@JsonSerialize(using=JsonDateSerializer.class)

public Date getDate() {

returndate;

}

你可能感兴趣的:(前后端时间格式化问题)