代码之家  ›  专栏  ›  技术社区  ›  Peter

如何生成Unix时间戳?

  •  188
  • Peter  · 技术社区  · 6 年前

    相关问题是 "Datetime To Unix timestamp" 但这个问题更为普遍。

    我需要Unix时间戳来解决 last question. 我对python、ruby和haskell感兴趣,但也欢迎其他方法。

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

    15 回复  |  直到 6 年前
        1
  •  358
  •   Zappi    6 年前

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

    date +%s
    

    哪里

    • +%s ,从1970-01-01 00:00:00 UTC开始的秒数。(GNU coreutils 8.24日期手册)

    示例输出现在为1454000043。

        2
  •  110
  •   bb.    15 年前

    红宝石:

    >> Time.now.to_i
    => 1248933648
    
        3
  •  17
  •   Pablo Fernandez    10 年前

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

    >>> import time
    >>> time.time()
    1335906993.995389
    >>> int(time.time())
    1335906993
    
        4
  •  15
  •   Hut8    10 年前

    curl icanhazepoch.com

    基本上是作为服务的Unix时间戳(utaas)

        5
  •  12
  •   davidchambers    13 年前

    在Perl:

    >> time
    => 1335552733
    
        6
  •  8
  •   Alan Horn    15 年前

    unix的“date”命令具有惊人的通用性。

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

    获取的输出 date ,它将以-f定义的格式,然后以+s的形式打印出来(j表示不要试图设置日期),从epoch开始的秒数。

        7
  •  7
  •   Jonathan Leffler    15 年前

    首先,Unix的“epoch”或“zero time”是1970-01-01 00:00:00Z(意思是1970年1月1日的午夜,在祖鲁或格林尼治标准时间或UTC时区)。Unix时间戳是自该时间起的秒数-不计算闰秒。

    用Perl生成当前时间相当容易:

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

    生成与给定日期/时间值相对应的时间比较不容易。逻辑上,您使用 strptime() posix中的函数。但是,perl posix::strptime模块(与posix模块分开)具有以下签名:

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

    函数 mktime 在posix模块中有签名:

    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"'
    
        8
  •  6
  •   Peter    9 年前
    $ date +%s.%N
    

    其中(GNU coreutils 8.24日期手册)

    • +%s ,从1970-01-01 00:00:00 UTC开始的秒数
    • +%N ,纳秒(000000000..999999999),从epoch开始

    现在输出示例 1454000043.704350695 . 我注意到BSD手册 date 没有包括对标志的准确解释 +%s .

        9
  •  3
  •   Mike Mackintosh    10 年前

    为了完整性,php:

    php -r 'echo time();'
    

    在巴什:

    clitime=$(php -r 'echo time();')
    echo $clitime
    
        10
  •  2
  •   Tom Morris    11 年前

    在哈斯克尔…

    要将其作为posixtime类型返回,请执行以下操作:

    import Data.Time.Clock.POSIX
    getPOSIXTime
    

    作为整数:

    import Data.Time.Clock.POSIX
    round `fmap` getPOSIXTime
    
        11
  •  2
  •   Rúben Jerónimo    11 年前
    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;
            }
        }
    
        12
  •  2
  •   Nick Grubb    8 年前

    在里面 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
    
        13
  •  2
  •   Madbreaks    7 年前

    让我们试试 JavaScript :

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

    …甚至更好,静态方法:

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

    在这两种情况下,我除以 1000 从秒到毫秒,我用 Math.floor 仅表示已通过的整秒数(与舍入相比,舍入可能会舍入到尚未通过的整秒数)。

        14
  •  1
  •   Dusan Jovanov    7 年前

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

        15
  •  0
  •   jlliagre    10 年前

    如果您需要来自shell脚本(bourne系列:sh、ksh、bash、zsh等)的unix时间戳,那么它应该在任何unix机器上工作,与其他建议(perl、haskell、ruby、python、gnu date)不同,它是基于posix标准命令和特性的。

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