关于夏令时的坑

对于日期类型,数据库MySQL中一般都是年月日的话选date类型,如果是精确到小时分钟的的一般都用datetime,然后再实体类里面统一映射成java.util.Date类型。

如:

    1、数据库表字段:

    

birth_day datetime 

   2、对应的实体属性

import java.util.Date;

public class UserEntity {
    //其他的属性略
    private Date birthDay;
}

   3、通过ajax调用返回的json格式结果:

{uid: 5, userName: "张三4", age: 5, address: "北京", birthDay: 675010800000}

  

   4、通过javasrcipt的new Date(date) //其中date为后台返回的long类型的日期, 构造相应格式的日期用于展示。

   

   下面看看对比下几个快照。

    

   数据库中的结果:

   

   java后台处理的日期:

    

   

       

    

      

     可以看出,“张三0” 这个用户 在数据库到java后台日期都是没有问题,为啥到前台就小了一个小时(1986-06-24 12:11:44 变成了 1986-06-24 11:11:44)。

 后面百度才知道是因为是 夏令时的缘故,前台浏览器还是按当时实行夏令时的日期做的转换,日期只要是

在如下范围,都会出现上面的问题。

1986年至1991年,每年四月的第2个星期日早上2点,到九月的第2个星期日早上2点之间。

1986年5月4日至9月14日(1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束)

1987年4月12日至9月13日,

1988年4月10日至9月11日,

1989年4月16日至9月17日,

1990年4月15日至9月16日,

1991年4月14日至9月15日。 

因此如果我们日期有属于上面范围的,最好是后台转化成字符串格式,直接在前台显示。

    

   

猜你喜欢

转载自liuyunlong1229.iteye.com/blog/2382174