Home >Backend Development >PHP Tutorial >数据库存储时间有几种方式

数据库存储时间有几种方式

PHPz
PHPzOriginal
2016-06-06 20:48:396431browse

数据库存储时间有3种方式,分别是:1、使用Timestamp方式;2、存储事件发生的时间毫秒值,在不同时区解析出来的时间表示不一样;3、直接是Date类型是数据格式,存储年月日。

数据库存储时间有几种方式

数据库存储时间有几种方式?

在平时的开发中,会在数据库中记录该条记录相关的操作时间,或业务上要用到的时间格式

正常使用中有以下三种类型:

1. 使用Timestamp,则会在数据库里存储:2017-12-21 07:20:01。
在不同时区,显示的都是2017-12-21 07:20:01,但其实他们并不是同一时间了。

2. 存储事件发生的时间毫秒值,在不同时区解析出来的时间表示不一样,但表达都是同一时间,能解决时区问题。

3. 直接是Date类型是数据格式,存储年月日。

在数据库里头的展示格式如图所示:

Java代码里头获取的时间如图所示:

1.TIMESTAMP格式 

<span style="font-size: 14px;">afaUser.setLastestLogin(new Date()); <br></span>

2.时间毫秒级 

<span style="font-size: 14px;">loginlog.setLastModifyTime(new Date().getTime()); <br></span>

3.Date类型 

afaUser.setEndDate(new Date());
<span style="font-size: 14px;">   SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");<br>   try {<br>        afaUser.setEndDate(sf.parse(sf.format(new Date())));<br>        afaUser.setStartDate(sf.parse(sf.format(new Date())));<br>    } catch (ParseException e) {            <br>    e.printStackTrace();<br>    } <br></span>

 格式化注意由于数据库是Date类型,所以无论怎么格式化,还是2017/12/21这种格式。   

在往前端传值的时候,若是TIMESTAMP类型,前端获取的是long类型的时间戳,这时候就要进行格式转换。所以这种格式比较麻烦,尽量少用。

一、在实体类中进行转换

<span style="font-size: 14px;">    @Column(name = "LASTEST_LOGIN")    private Date lastestLogin;         //返回前端会是毫秒时间戳。<br>    <br>    @Transient    private String lastLoginDate;      //新建一个字段,将lastestLogin格式转化所需要的时间格式。    <br>    public String getLastLoginDate() {<br>        SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        try {            if(this.lastestLogin!=null){<br>                lastLoginDate=sf.format(lastestLogin);<br>            }<br>        } catch (Exception e) {<br>        }        return lastLoginDate;<br>    }    public void setLastLoginDate(String lastLoginDate) {        this.lastLoginDate = lastLoginDate;<br>    }<br></span>

二、在前端web进行转换

<span style="font-size: 14px;"><script language="javascript">   
<br>    //扩展Date的format方法 
<br>    Date.prototype.format = function (format) {        var o = {            "M+": this.getMonth() + 1,            "d+": this.getDate(),            "h+": this.getHours(),            "m+": this.getMinutes(),            "s+": this.getSeconds(),            "q+": Math.floor((this.getMonth() + 3) / 3),            "S": this.getMilliseconds()<br>        }        if (/(y+)/.test(format)) {<br>            format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));<br>        }        for (var k in o) {            if (new RegExp("(" + k + ")").test(format)) {<br>                format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));<br>            }<br>        }        return format;<br>    }    /**  <br>    *转换日期对象为日期字符串  <br>    * @param date 日期对象  <br>    * @param isFull 是否为完整的日期数据,  <br>    *               为true时, 格式如"2000-03-05 01:05:04"  <br>    *               为false时, 格式如 "2000-03-05"  <br>    * @return 符合要求的日期字符串  <br>    */  <br>    function getSmpFormatDate(date, isFull) {        var pattern = "";        if (isFull == true || isFull == undefined) {<br>            pattern = "yyyy-MM-dd hh:mm:ss";<br>        } else {<br>            pattern = "yyyy-MM-dd";<br>        }        return getFormatDate(date, pattern);<br>    }    /**  <br>    *转换当前日期对象为日期字符串  <br>    * @param date 日期对象  <br>    * @param isFull 是否为完整的日期数据,  <br>    *               为true时, 格式如"2000-03-05 01:05:04"  <br>    *               为false时, 格式如 "2000-03-05"  <br>    * @return 符合要求的日期字符串  <br>    */  <br><br>    function getSmpFormatNowDate(isFull) {        return getSmpFormatDate(new Date(), isFull);<br>    }    /**  <br>    *转换long值为日期字符串  <br>    * @param l long值  <br>    * @param isFull 是否为完整的日期数据,  <br>    *               为true时, 格式如"2000-03-05 01:05:04"  <br>    *               为false时, 格式如 "2000-03-05"  <br>    * @return 符合要求的日期字符串  <br>    */  <br><br>    function getSmpFormatDateByLong(l, isFull) {        return getSmpFormatDate(new Date(l), isFull);<br>    }    /**  <br>    *转换long值为日期字符串  <br>    * @param l long值  <br>    * @param pattern 格式字符串,例如:yyyy-MM-dd hh:mm:ss  <br>    * @return 符合要求的日期字符串  <br>    */  <br><br>    function getFormatDateByLong(l, pattern) {        return getFormatDate(new Date(l), pattern);<br>    }    /**  <br>    *转换日期对象为日期字符串  <br>    * @param l long值  <br>    * @param pattern 格式字符串,例如:yyyy-MM-dd hh:mm:ss  <br>    * @return 符合要求的日期字符串  <br>    */  <br>    function getFormatDate(date, pattern) {        if (date == undefined) {<br>            date = new Date();<br>        }        if (pattern == undefined) {<br>            pattern = "yyyy-MM-dd hh:mm:ss";<br>        }        return date.format(pattern);<br>    } 
<br>    //alert(getSmpFormatDate(new Date(1279849429000), true));    //alert(getSmpFormatDate(new Date(1279849429000),false));    <br>    //alert(getSmpFormatDateByLong(1279829423000, true));<br>    alert(getSmpFormatDateByLong(1279829423000,false));    <br>    //alert(getFormatDateByLong(1279829423000, "yyyy-MM"));    //alert(getFormatDate(new Date(1279829423000), "yy-MM"));    //alert(getFormatDateByLong(1279849429000, "yyyy-MM hh:mm"));     </script> <br></span>

 所以在实际使用过程中可以使用Date或者事件发生的时间毫秒值,少用TIMESTAMP类型进行数据的存储。

<span style="font-size: 14px;">import java.text.*;<br>import java.util.Date;/**<br>  SimpleDateFormat函数语法:<br>  <br>  G 年代标志符<br>  y 年<br>  M 月<br>  d 日<br>  h 时 在上午或下午 (1~12)<br>  H 时 在一天中 (0~23)<br>  m 分<br>  s 秒<br>  S 毫秒<br>  E 星期<br>  D 一年中的第几天<br>  F 一月中第几个星期几<br>  w 一年中第几个星期<br>  W 一月中第几个星期<br>  a 上午 / 下午 标记符 
<br>  k 时 在一天中 (1~24)<br>  K 时 在上午或下午 (0~11)<br>  z 时区 */public class FormatDateTime {    public static void main(String[] args) {<br>        SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");<br>        SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); 
<br>        SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()<br>        SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");<br>        SimpleDateFormat myFmt4=new SimpleDateFormat(                "一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");<br>        Date now=new Date();<br>        System.out.println(myFmt.format(now));<br>        System.out.println(myFmt1.format(now));<br>        System.out.println(myFmt2.format(now));<br>        System.out.println(myFmt3.format(now));<br>        System.out.println(myFmt4.format(now));<br>        System.out.println(now.toGMTString());<br>        System.out.println(now.toLocaleString());<br>        System.out.println(now.toString());<br>    }    <br>    <br>}<br></span>

 效果如下:

<span style="font-size: 14px;">效果:<br>2004年12月16日 17时24分27秒04/12/16 17:242004-12-16 17:24:272004年12月16日 17时24分27秒 星期四 
<br>一年中的第 351 天 一年中第51个星期 一月中第3个星期 在一天中17时 CST时区16 Dec 2004 09:24:27 GMT2004-12-16 17:24:27Thu Dec 16 17:24:27 CST 2004<br></span>

 更多相关技术文章,请访问PHP中文网

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn