###東八區時間計算。轉換
https://c.runoob.com/front-end/852
UNIX 時間戳轉換工具,可以將 UNIX 時間戳轉換成標准格式的北京時間,也可以將標准格式的北京時間轉換為 UNIX 時間戳。 關於Unix時間戳(Unix timestamp) 時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。 如何在不同編程語言中獲取現在的Unix時間戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000) getTime()返回數值的單位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000 MySQL SELECT unix_timestamp(now()) Perl time PHP time() PostgreSQL SELECT extract(epoch FROM now()) Python 先 import time 然后 time.time() Ruby 獲取Unix時間戳:Time.now 或 Time.new 顯示Unix時間戳:Time.now.to_i SQL Server SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) Unix / Linux date +%s VBScript / ASP DateDiff("s", "01/01/1970 00:00:00", Now())
其他操作系統 (如果Perl被安裝在系統中) 命令行狀態:perl -e "print time" 如何在不同編程語言中實現Unix時間戳(Unix timestamp) → 普通時間? Java String date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date(Unix timestamp * 1000)) JavaScript 先 var unixTimestamp = new Date(Unix timestamp * 1000) 然后 commonTime = unixTimestamp.toLocaleString() Linux date -d @Unix timestamp MySQL from_unixtime(Unix timestamp) Perl 先 my $time = Unix timestamp 然后 my ($sec, $min, $hour, $day, $month, $year) = (localtime($time))[0,1,2,3,4,5,6] PHP date('r', Unix timestamp) PostgreSQL SELECT TIMESTAMP WITH TIME ZONE 'epoch' + Unix timestamp) * INTERVAL '1 second'; Python 先 import time 然后 time.gmtime(Unix timestamp) Ruby Time.at(Unix timestamp) SQL Server DATEADD(s, Unix timestamp, '1970-01-01 00:00:00') VBScript / ASP DateAdd("s", Unix timestamp, "01/01/1970 00:00:00") 其他操作系統 (如果Perl被安裝在系統中) 命令行狀態:perl -e "print scalar(localtime(Unix timestamp))" 如何在不同編程語言中實現普通時間 → Unix時間戳(Unix timestamp)? Java long epoch = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00"); JavaScript var commonTime = new Date(Date.UTC(year, month - 1, day, hour, minute, second)) MySQL SELECT unix_timestamp(time) 時間格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD Perl 先 use Time::Local 然后 my $time = timelocal($sec, $min, $hour, $day, $month, $year); PHP mktime(hour, minute, second, day, month, year) PostgreSQL SELECT extract(epoch FROM date('YYYY-MM-DD HH:MM:SS')); Python 先 import time 然后 int(time.mktime(time.strptime('YYYY-MM-DD HH:MM:SS', '%Y-%m-%d %H:%M:%S'))) Ruby Time.local(year, month, day, hour, minute, second) SQL Server SELECT DATEDIFF(s, '1970-01-01 00:00:00', time) Unix / Linux date +%s -d"Jan 1, 1970 00:00:01" VBScript / ASP DateDiff("s", "01/01/1970 00:00:00", time)
######感謝壹峰
Oracle時間與Unix時間戳的轉換
Unix時間戳記是從'1970-01-01 00:00:00'GMT開始的秒數,表現為整數型。
Oracle中的時間是Date型,以下函數提供了兩種時間轉換的Oracle函數
(1)從Unix時間戳記轉換為Oracle時間
create or replace function unix_to_oracle(in_number NUMBER) return date is
begin
return(TO_DATE('19700101','yyyymmdd') + in_number/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24);
end unix_to_oracle;
(2)由Oracle時間Date型轉換為Unix時間戳記
create or replace function oracle_to_unix(in_date IN DATE) return number is
begin
return( (in_date -TO_DATE('19700101','yyyymmdd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600);
end oracle_to_unix;
-- 時間轉 10位時間戳 select (sysdate - TO_DATE('19700101', 'yyyymmdd')) * 86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone), 1, 3)) * 3600 from dual; -- 10位時間戳 轉 時間 select TO_DATE('19700101', 'yyyymmdd') + 1516862035 / 86400 + TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone), 1, 3)) / 24 from dual;
##感謝作業網用戶
每個地區都有自己的本地時間,在網上以及無線電通信中時間轉換的問題就顯得格外突出.我自己就經常混淆於此,特地研究了一下,記錄在此以備忘.
整個地球分為二十四時區,每個時區都有自己的本地時間.在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated).UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時相同.在本文中,UTC與GMT含義完全相同.
北京時區是東八區,領先UTC八個小時,在電子郵件信頭的Date域記為+0800.如果在電子郵件的信頭中有這么一行:
Date: Fri, 08 Nov 2002 09:42:22 +0800
說明信件的發送地的地方時間是二○○二年十一月八號,星期五,早上九點四十二分(二十二秒),這個地方的本地時領先UTC八個小時(+0800, 就是東八區時間).電子郵件信頭的Date域使用二十四小時的時鍾,而不使用AM和PM來標記上下午.
以這個電子郵件的發送時間為例,如果要把這個時間轉化為UTC,可以使用一下公式:
UTC + 時區差 = 本地時間
時區差東為正,西為負.在此,把東八區時區差記為 +0800, -》重要
UTC + (+0800) = 本地(北京)時間 (1)
那么,UTC = 本地時間(北京時間))- 0800 (2)
0942 - 0800 = 0142
即UTC是當天凌晨一點四十二分二十二秒.如果結果是負數就意味着是UTC前一天,把這個負數加上2400就是UTC在前一天的時間.例如,本地(北京)時間是 0432 (凌晨四點三十二分),那么,UTC就是 0432 - 0800 = -0368,負號意味着是前一天, -0368 + 2400 = 2032,既前一天的晚上八點三十二分.
紐約的時區是西五區,比UTC落后五個小時,記為 -0500:
UTC + (-0500) = 紐約時間 (3)
UTC = 紐約時間 + 0500 (4)
把(2)式 - (4)式相比較,
UTC = 北京時間 - 0800 = 紐約時間 + 0500 (5)
即 北京時間 = 紐約時間 + 1300 (6)
即北京時間領先紐約時間十三個小時,由(6)式,
紐約時間 = 北京時間 - 1300 (7)
在四月下旬,紐約又換用夏令時,又稱為日光節約時,比標准紐約時間提前一個小時,實際成為西四區的標准時間,成為 -0400.
UTC + (-0400) = 紐約夏令時,套用以上公式,
北京時間 = 紐約夏令時 + 1200
紐約夏令時 = 北京時間 - 1200
在這些轉換中,最重要的公式就是
UTC + 時區差 = 本地時間
時區差東為正,西為負.例如,東八區(北京)是 +0800,西五區(紐約)是-0500,加州是西八區,是-0800,美國中部時區是西六區,-0600,美國山地時區是西七區,-0700,太平洋時區是西八區,-0800,在夏天使用夏時制,成為-0700.德國時區是東一區,+0100,夏天變為+0200.
多數電子郵件程序,例如Outlook Express,在顯示時間時,計算機程序把時間先轉換成為本地時間再顯示,例如,郵件的Date域為:
Date: Fri, 08 Nov 2002 09:42:22 +0800
Outlook Express在顯示時就顯示為:
Date: Thur, 07 Nov 2002 08:42:22 pm,把北京時間轉換成為了紐約時間,而且把二十四小時格式的時間轉換成為了十二小時的格式.當然,為了時間轉換正確,發送方和接受方的計算機的時區都要設置正確,在這里,發送方的時區要正確地設為北京時區東八區,而我的時區要設為西五區.
為了方便起見,我在這里放上紐約,加洲以及北京實時顯示的時鍾,以省去計算的麻煩.