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


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM