為什麽要使用Unix時間戳
概念:
UNIX時間戳:Unix時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)
是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
UNIX時間戳的0按照ISO 8601規範為 :1970-01-01T00:00:00Z.
一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。
在大多數的UNIX系統中UNIX時間戳存儲為32位,這樣會引發2038年問題或Y2038。
時間 秒
1 分鐘 60 秒
1 小時 3600 秒
1 天 86400 秒
1 周 604800 秒
1 月 (30.44 天) 2629743 秒
1 年 (365.24 天) 31556926 秒
思考:
為什麽使用UNIX時間戳?
在現在的系統中經常遇到跨數據庫的應用開發,在數據庫系統中不同的數據庫對與時間類型卻有不同解釋,比如ORACLE的date和MYSQL裏面的date就不能直接兼容轉換,數據方面還可以使用數據遷移工具進行轉換,但是對與應用來說那就是災難(在這不談hibernate等可以垮數據庫的框架)。
為了實現垮平臺在應用系統中記錄時間的時候我們就可以使用記錄UNIX時間戳的方法做到垮平臺性。
現在大多數的語言java、PHP、Perl等都支持直接取UNIX時間戳,將需要記錄的時間記錄為UNIX時間戳,這樣就可以不同的數據庫系統中的垮平臺性,對與時間的操作只要對時間戳操作就行了。其實這樣的處理方法在很多開源的系統中都能看到,但是對與經常搞J2EE的人來說很不習慣.
處理:
下面簡單介紹下相關處理的方法:
- 1
- 2
================================獲取系統UNIX時間戳=======================================
Perl time
PHP time()
Ruby Time.now (or Time.new). To display the epoch: Time.now.to_i
Python import time first, then time.time()
Java long epoch = System.currentTimeMillis()/1000;
Microsoft .NET C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASP DateDiff(“s”, “01/01/1970 00:00:00”, Now())
MySQL SELECT unix_timestamp(now())
PostgreSQL SELECT extract(epoch FROM now());
SQL Server SELECT DATEDIFF(s, ‘19700101’, GETDATE())
JavaScript Math.round(new Date().getTime()/1000.0) getTime() returns time in milliseconds.
Unix/Linux date +%s
Other OS’s Command line: perl -e “print time” (If Perl is installed on your system)
================================將時間轉換成UNIX時間戳=======================================
Perl Use these Perl Epoch routines
PHP mktime(hour, minute, second, month, day, year) More information
Ruby Time.local(year, month, day, hour, minute, second, usec ) (or Time.gm for GMT/UTC input). To display add .to_i
Python import time first, then int(time.mktime(time.strptime(‘2000-01-01 12:34:00’, ‘%Y-%m-%d %H:%M:%S’)))
Java long epoch = new java.text.SimpleDateFormat (“dd/MM/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00”);
VBScript/ASP DateDiff(“s”, “01/01/1970 00:00:00”, time field) More information
MySQL SELECT unix_timestamp(time) Time format: YYYY-MM-DD HH:MM:SS or YYMMDD or YYYYMMDD More information
PostgreSQL SELECT extract(epoch FROM date(‘2000-01-01 12:34’));
With timestamp: SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE ‘2001-02-16 20:38:40-08’);
With interval: SELECT EXTRACT(EPOCH FROM INTERVAL ‘5 days 3 hours’);
SQL Server SELECT DATEDIFF(s, ‘19700101’, time field)
JavaScript use the JavaScript Date object
Unix/Linux date +%s -d”Jan 1, 1980 00:00:01”
================================將UNIX時間戳轉換成時間=======================================
Perl Use these Perl Epoch routines
PHP date(output format, epoch); Output format example: ‘r’ = RFC 2822 date More information
Ruby Time.at(epoch)
Python import time first, then time.gmtime(epoch) time is an array of year, month, day, hour, min, sec, day of week, day of year, DST More information
Java String date = new java.text.SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).format(new java.util.Date (epoch*1000));
VBScript/ASP DateAdd(“s”, epoch, “01/01/1970 00:00:00”) More information
PostgreSQL SELECT TIMESTAMP WITH TIME ZONE ‘epoch’ + epoch * INTERVAL ‘1 second’;
MySQL from_unixtime(epoch, optional output format) The default output format is YYY-MM-DD HH:MM:SS More information
SQL Server DATEADD(s, epoch, ‘19700101’)
JavaScript use the JavaScript Date object
Linux date -d @1190000000 (replace 1190000000 with your epoch, needs newer version of date)
Other OS’s Command line: perl -e “print scalar(localtime(epoch))” (If Perl is installed) Replace ‘localtime’ with ‘gmtime’ for GMT/UTC time.
轉自:http://hi.baidu.com/xzeus/blog/item/823dd1001f2d6217738b6510.html
from_unixtime()是MySQL裏的時間函數,將時間戳轉換成日期
date為需要處理的參數(該參數是Unix 時間戳),可以是字段名,也可以直接是Unix 時間戳字符串
後面的 ‘%Y%m%d’ 主要是將返回值格式化
例如:
mysql>SELECT FROM_UNIXTIME( 1249488000, ‘%Y%m%d’ )
->20071120
mysql>SELECT FROM_UNIXTIME( 1249488000, ‘%Y年%m月%d’ )
->2007年11月20
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格式的數字。
例如:
mysql> SELECT UNIX_TIMESTAMP() ; (執行使得時間:2009-08-06 10:10:40)
->1249524739
mysql> SELECT UNIX_TIMESTAMP(‘2009-08-06’) ;
->1249488000
SELECT *
FROM student
WHERE regTime > UNIX_TIMESTAMP( curdate( ) ) //今天所有學生註冊記錄。
Unix時間戳(Unix timestamp)轉換工具:
http://tool.chinaz.com/Tools/unixtime.aspx
參考:http://blog.csdn.net/chenxiaodan_danny/article/details/51120291
為什麽要使用Unix時間戳