1. 程式人生 > >數據庫日期時間顯示在頁面上格式錯誤的解決方案

數據庫日期時間顯示在頁面上格式錯誤的解決方案

表達 () myba 選擇 通過 artifact urn 取值 時間顯示

做項目過程中肯定會碰到這樣一個問題:在數據庫中存的是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時間!

以後如果有更多此問題的解決方案我也會繼續更新的,歡迎留言討論~

數據庫日期時間顯示在頁面上格式錯誤的解決方案