如何生成Unix时间戳?

Léo*_* 준영 219 unix unix-timestamp

相关问题是"Datetime To Unix timestamp",但这个问题比较笼统.

我需要Unix时间戳来解决我的最后一个问题.我的兴趣是Python,Ruby和Haskell,但欢迎其他方法.

生成Unix时间戳的最简单方法是什么?

小智 427

在Linux或MacOS中,您可以使用:

date +%s
Run Code Online (Sandbox Code Playgroud)

哪里

  • +%s,自1970-01-01 00:00:00 UTC以来的秒数.(GNU Coreutils 8.24日期手册)

示例输出现在为1454000043.


bb.*_*bb. 110

在Ruby中:

>> Time.now.to_i
=> 1248933648
Run Code Online (Sandbox Code Playgroud)


Col*_* Su 20

Bash 5 中有一个新变量:

echo $EPOCHSECONDS
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要更高的精度(以微秒为单位):

echo $EPOCHREALTIME
Run Code Online (Sandbox Code Playgroud)


Ste*_*lla 18

在python中添加以下行以获取时间戳:

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993
Run Code Online (Sandbox Code Playgroud)


Hut*_*ut8 16

curl icanhazepoch.com

基本上它是unix时间戳即服务(UTaaS)

  • 服务[离线](https://major.io/2022/07/28/extra-icanhazip-services-going-offline/)自2022年8月17日起 (5认同)
  • 嘿,很好。这启发了我向自己的爱好网站添加类似功能。`curl -L -H“ Accept:application / json” unixtimesta.mp`将为您提供{{datetime“:” Thu,19 Jul 2018 12:01:21 GMT“,” timestamp“:1532001681}` (2认同)

dav*_*ers 12

在Perl中:

>> time
=> 1335552733
Run Code Online (Sandbox Code Playgroud)


小智 8

unix'date'命令令人惊讶地多才多艺.

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

获取输出date,它将采用-f定义的格式,然后将其打印出来(-j表示不要尝试设置日期),格式为+%s,自纪元以来的秒数.

  • `date:invalid option - 'j'` (4认同)
  • 那是 GNU 日期扩展,而不是 Unix 标准 (POSIX)。 (2认同)

Jon*_*ler 7

首先,Unix'纪元'或零时间是1970-01-01 00:00:00Z(即1970年1月1日午夜在Zulu或GMT或UTC时区).Unix时间戳是自那时起的秒数 - 不考虑闰秒.

在Perl中生成当前时间非常简单:

perl -e 'print time, "\n"'
Run Code Online (Sandbox Code Playgroud)

生成对应于给定日期/时间值的时间相当简单.从逻辑上讲,您使用strptime()POSIX中的功能.但是,Perl POSIX :: strptime模块(与POSIX模块分开)具有签名:

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday) = 
                                     POSIX::strptime("string", "Format");
Run Code Online (Sandbox Code Playgroud)

mktimePOSIX模块中的函数具有签名:

mktime(sec, min, hour, mday, mon, year, wday = 0, yday = 0, isdst = 0)
Run Code Online (Sandbox Code Playgroud)

因此,如果您知道数据的格式,可以编写一个变体:

perl -MPOSIX -MPOSIX::strptime -e \
    'print mktime(POSIX::strptime("2009-07-30 04:30", "%Y-%m-%d %H:%M")), "\n"'
Run Code Online (Sandbox Code Playgroud)


Lyd*_*dia 7

$ date +%s.%N
Run Code Online (Sandbox Code Playgroud)

where(GNU Coreutils 8.24日期手册)

  • +%s,自1970-01-01 00:00:00 UTC以来的秒数
  • +%N,纳秒(000000000..999999999)自纪元以来

现在输出示例1454000043.704350695.我注意到BSD手册date没有包含关于旗帜的精确解释+%s.

  • 仅供参考,`%N`在macOS 10.13.1(High Sierra)中没有记录日期手册页,因此不起作用。我得到的样本输出是:1523342391.N。 (2认同)
  • 在 macOS 上,Homebrew 中有 `gdate` https://apple.stackexchange.com/a/135749/181223 (2认同)

Zag*_*Nut 5

哈斯克尔

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime
Run Code Online (Sandbox Code Playgroud)

围棋中

import "time"
t := time.Unix()
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

斯威夫特

NSDate().timeIntervalSince1970 // or Date().timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)