我怎样才能生成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()