我怎样才能生成Unix时间戳?
相关的问题是“date时间到Unix时间戳” ,但这个问题是更一般的。
我需要Unix时间戳来解决我最后一个问题。 我的兴趣是Python,Ruby和Haskell,但也欢迎其他的方法。
什么是生成Unix时间戳最简单的方法?
在Linux中你可以使用:
date +%s
哪里
-
+%s
,自1970-01-01 00:00:00 UTC以来的秒数。 (GNU Coreutils 8.24date手册)
示例输出现在1454000043。
在Ruby中:
>> Time.now.to_i => 1248933648
在Python中添加以下行来获得时间戳:
>>> import time >>> time.time() 1335906993.995389 >>> int(time.time()) 1335906993
在Perl中:
>> time => 1335552733
unix的'date'命令令人惊讶的多才多艺。
date-j -f“%a%b%d%T%Z%Y”“`date`”“+%s”
输出date
的格式,格式为-f,然后打印出来(-j表示不要尝试设置date),格式为+%s,自纪元以来的秒数。
首先,Unix“时代”或零时间是1970-01-01 00:00:00(意指1970年1月1日午夜在Zulu或GMT或UTC时区)。 Unix时间戳记是从那以后的秒数 – 没有考虑闰秒。
在Perl中生成当前时间相当简单:
perl -e 'print time, "\n"'
生成对应于给定date/时间值的时间是相当不容易的。 从逻辑上讲,您使用POSIX的strptime()
函数。 但是,Perl POSIX :: strptime模块(与POSIX模块分开)具有签名:
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = POSIX::strptime("string", "Format");
POSIX模块中的函数mktime
具有签名:
mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
所以,如果你知道你的数据的格式,你可以写一个变种:
perl -MPOSIX -MPOSIX::strptime -e \ 'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
curl icanhazepoch.com
基本上它是unix时间戳服务(UTaaS)
$ date +%s.%N
哪里(GNU Coreutils 8.24date手册)
-
+%s
,自1970-01-01 00:00:00 UTC以来的秒数 -
+%N
,纳秒(000000000..999999999)自纪元
示例输出现在是1454000043.704350695
。 我注意到date
BSD手册没有包含关于flag +%s
精确解释。
为了完整,PHP:
php -r 'echo time();'
在BASH:
clitime=$(php -r 'echo time();') echo $clitime
这是我放在一起的一个小工具,因为我总是需要获取和转换unix时间戳: http : //www.unixstamp.com
它几乎支持任何格式,包括JavaScript毫秒时间戳。
在Haskell中…
要将其作为POSIXTimetypes返回:
import Data.Time.Clock.POSIX getPOSIXTime
作为整数:
import Data.Time.Clock.POSIX round `fmap` getPOSIXTime
public static Int32 GetTimeStamp() { try { Int32 unixTimeStamp; DateTime currentTime = DateTime.Now; DateTime zuluTime = currentTime.ToUniversalTime(); DateTime unixEpoch = new DateTime(1970, 1, 1); unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds; return unixTimeStamp; } catch (Exception ex) { Debug.WriteLine(ex); return 0; } }
在Haskell
import Data.Time.Clock.POSIX main :: IO () main = print . floor =<< getPOSIXTime
在去
import "time" t := time.Unix()
在C
time(); // in time.h POSIX // for Windows time.h #define UNIXTIME(result) time_t localtime; time(&localtime); struct tm* utctime = gmtime(&localtime); result = mktime(utctime);
在Swift中
NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970
如果你需要从shell脚本(Bourne系列:sh,ksh,bash,zsh,…)中得到一个Unix时间戳,那么它应该可以在任何Unix机器上工作,而不像其他的build议(perl,haskell,ruby,python,GNU date ),它基于POSIX标准命令和function。
PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'
让我们试试JavaScript :
var t = new Date().getTime();
…甚至更好,静态的方法:
var t = Date.now()