zoukankan      html  css  js  c++  java
  • 数据库日期时间显示在页面上格式错误的解决方案

    做项目过程中肯定会碰到这样一个问题:在数据库中存的是date或datetime类型的值,从数据库里取出来遍历到页面上显示的是long类型或是GTM类型的日期时间。
    对于这个问题,经过研究之后有以下结论:

    1.hibernate不会出现这样的问题,而mabatis则会出现这个问题。

    2.数据库使用date类型的在页面上会显示long类型日期时间,使用datetime类型的在页面上会显示GTM类型日期时间。

    因为我用的是mysql数据库,其他的数据库没测试过,所以也不知道其他数据库是怎样的情况,这里就针对mybatis+mysql数据库的情况来说一下我的解决方案吧。

    通用解决方案:将实体类中的参数从Date类型换成String类型,一招治百病,但是如果不想通过这种方式解决的童鞋请往下看~

    出现GTM时间(格林时间)的解决方案:

    方案一(自定义,从后台着手解决问题):在后台把数据封装到一个Map里,key为格式化之后的时间字符串,然后在前台遍历map时,取值为{map.key}就行了。ps:自定义的解决方式,仅供参考~

    方案二(推荐,从前端着手解决问题):之前没想到jstl标签库也可以格式化处理数据这一茬,所以后来还是用的这种方案。本着能在前端解决的事绝不放在后台解决,减轻服务器压力的原则,我果断的选择了这一种方法~(其实是这种方式简单,想偷懒而已...)

    普通web项目引入jar包,maven项目添加jstl依赖,添加依赖可参考:http://www.cnblogs.com/ggqzz/p/8421734.html

    引入标签:

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

    在遍历日期的位置添加代码

    <fmt:formatDate type="both" value="${order.orderTime}" />

    出现Long类型时间的解决方案:

    方案一:jstl标签库fmt标签,这个上面讲过,就不多说了。

    因为这一个项目是用easyui完成的,并且数据是由datagrid遍历出来的,并没有使用el表达式,所以我用的下面2种方式。

    方案二:使用datagrid自带formatter(格式化列)的属性,可以直接定义函数,然后在需要格式化的列上加上formatter="函数名"(注意后面不需要加括号)的属性就OK了。

    自定义函数,实际上这也是js格式化时间的一种方式:

    function formatDate(val) {
                var date = new Date(val);
                var y = date.getFullYear();
                var m = date.getMonth() + 1;
                var d = date.getDate();
                return y + '-' + m + '-' + d;
            }

    方式三(推荐):这种方式是使用jackson提供的注解,个人感觉还是很好用的~

    先引入依赖:

    <!-- jackson-databind依赖 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.2</version>
            </dependency>

    在实体类Date类型属性上加上注解:

    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
        private Date openDate;

    注意:timezone="GMT+8"这个属性必须加上,不然时区不对会导致日期的偏差!这种方式也格式化不了GTM时间!

    以后如果有更多此问题的解决方案我也会继续更新的,欢迎留言讨论~

  • 相关阅读:
    把影响集中到一个点
    How to avoid Over-fitting using Regularization?
    适定性问题
    Numerical Differentiation 数值微分
    What Every Computer Scientist Should Know About Floating-Point Arithmetic
    Generally a good method to avoid this is to randomly shuffle the data prior to each epoch of training.
    What is the difference between iterations and epochs in Convolution neural networks?
    Every norm is a convex function
    Moore-Penrose Matrix Inverse 摩尔-彭若斯广义逆 埃尔米特矩阵 Hermitian matrix
    perl 类里的函数调用其他类的函数
  • 原文地址:https://www.cnblogs.com/ggqzz/p/8438757.html
Copyright © 2011-2022 走看看