如何生成Unix时间戳?

问题描述 投票:200回答:17

相关的问题是"Datetime To Unix timestamp",但这个问题更为笼统。

我需要Unix时间戳来解决我的last question.我的兴趣是Python,Ruby和Haskell,但欢迎其他方法。

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

unix unix-timestamp
17个回答
397
投票

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

date +%s

哪里

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

示例输出现在为1454000043。


3
投票

Haskell

import Data.Time.Clock.POSIX

main :: IO ()
main = print . floor =<< getPOSIXTime

Go

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

2
投票

在哈斯克尔......

要将其作为POSIXTime类型返回:

import Data.Time.Clock.POSIX
getPOSIXTime

作为整数:

import Data.Time.Clock.POSIX
round `fmap` getPOSIXTime

2
投票
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;
        }
    }

2
投票

我们来试试JavaScript

var t = Math.floor((new Date().getTime()) / 1000);

......甚至更好,静态方法:

var t = Math.floor(Date.now() / 1000);

在这两种情况下,我除以1000从秒到毫秒,我使用Math.floor只代表已经过去的整秒(相对于四舍五入,可能会四舍五入到尚未过去的整秒)。


0
投票

如果您需要来自shell脚本的Unix时间戳(Bourne系列:sh,ksh,bash,zsh,...),这应该适用于任何Unix机器,与其他建议不同(perl,haskell,ruby,python,GNU date ),它基于POSIX标准命令和功能。

PATH=`getconf PATH` awk 'BEGIN {srand();print srand()}'

0
投票

使用NodeJS,只需打开一个终端并输入: node -e "console.log(new Date().getTime())"node -e "console.log(Date.now())"


0
投票

在Bash 5中有一个新变量:

echo $EPOCHSECONDS

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

echo $EPOCHREALTIME

0
投票

如果我想使用date命令打印utc日期时间,我需要使用-u参数和date命令。

date -u

产量

Fri Jun 14 09:00:42 UTC 2019

110
投票

在Ruby中:

>> Time.now.to_i
=> 1248933648

17
投票

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

>>> import time
>>> time.time()
1335906993.995389
>>> int(time.time())
1335906993

16
投票

curl icanhazepoch.com

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


12
投票

在Perl中:

>> time
=> 1335552733

8
投票

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

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

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


7
投票

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

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

perl -e 'print time, "\n"'

生成对应于给定日期/时间值的时间相当简单。从逻辑上讲,您使用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"'

6
投票
$ date +%s.%N

where(GNU Coreutils 8。24日期手册)

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

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


4
投票

为了完整性,PHP:

php -r 'echo time();'

在BASH:

clitime=$(php -r 'echo time();')
echo $clitime
© www.soinside.com 2019 - 2024. All rights reserved.