FROM_UNIXTIME()和UNIX_TIMESTAMP()函數的區別


Unix時間戳(Unix timestamp),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數。

在MySQL中如何格式化時間戳?
在mysql中因為timestamp無法支持到毫秒,所以很多時候采用毫秒進行存儲。那么如何將存儲在數據庫中Int類型的時間,如: 1344954515 ,轉換成我們正常可以肉眼能看懂的時間格式呢?

我們一般都使用FROM_UNIXTIME函數。
FROM_UNIXTIME(unix_timestamp,format)
unix_timestamp為需要處理的時間戳(該參數是Unix 時間戳),可以是字段名,也可以直接是Unix 時間戳字符串。
format為需要轉換的格式
mysql官方手冊的解釋為:返回'YYYY-MM- DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp參數表示,具體格式取決於該函數是否用在字符串中或是數字語境中。若format 已經給出,則結果的格式是根據format 字符串而定。
format的格式和日常的編程語言的時間格式是保持一致的。
例如:

?
1
2
3
4
5
6
7
mysql> select FROM_UNIXTIME(1344954515, '%Y-%m-%d %H:%i:%S' );
+ -----------------------------------------------+
| FROM_UNIXTIME(1344954515, '%Y-%m-%d %H:%i:%S' ) |
+ -----------------------------------------------+
| 2012-08-14 22:28:35                           |
+ -----------------------------------------------+
1 row in set (0.00 sec)


UNIX_TIMESTAMP()是與之相對的時間函數
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
官方手冊解釋為:若無參數調用,則返回一個 Unix timestamp ('1970-01-01 00:00:00' GMT 之后的秒數) 作為無符號整數。若用date 來調用 UNIX_TIMESTAMP(),它會將參數值以'1970-01-01 00:00:00' GMT后的秒數的形式返回。
date 可以是一個 DATE 字符串、一個 DATETIME字符串、一個 TIMESTAMP或一個當地時間的YYMMDD 或YYYMMDD格式的數字。

例如:

?
1
2
3
4
5
6
7
mysql> select UNIX_TIMESTAMP( '2012-09-04 18:17:23' );
+ ---------------------------------------+
| UNIX_TIMESTAMP( '2012-09-04 18:17:23' ) |
+ ---------------------------------------+
|                            1346753843 |
+ ---------------------------------------+
1 row in set (0.00 sec)


實際應用中,我們可以將格式轉換為毫秒的與數據庫中進行比較,也可以將數據庫的Int格式轉換為普通格式進行比較。
例如:查詢所有創建日期大於2012-09-03 18:00:00之后的博客數據
方法一:將日期轉換為int比較

?
1
select * from blog where createdTime > UNIX_TIMESTAMP( '2012-09-03 18:00:00' );


方法二:將int轉換為時間格式比較

?
1
select * from blog where FROM_UNIXTIME(createdTime, '%Y-%m-%d %H:%i:%S' ) > '2012-09-03 18:00:00' ;


下列修飾符可以被用在format字符串中,可以組合一些常見日期格式:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 數字, 4 位
%y 年, 數字, 2 位
%a 縮寫的星期名字(Sun……Sat)
%d 月份中的天數, 數字(00……31)
%e 月份中的天數, 數字(0……31)
%m 月, 數字(01……12)
%c 月, 數字(1……12)
%b 縮寫的月份名字(Jan……Dec)
%j 一年中的天數(001……366)
%H 小時(00……23)
%k 小時(0……23)
%h 小時(01……12)
%I 小時(01……12)
%i 分鍾, 數字(00……59)
%r 時間,12 小時(hh:mm:ss [AP]M)
%T 時間,24 小時(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一個星期中的天數(0=Sunday ……6=Saturday )
%U 星期(0……52), 這里星期天是星期的第一天
%u 星期(0……52), 這里星期一是星期的第一天

%% 一個文字“%”。


免責聲明!

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



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