代码之家  ›  专栏  ›  技术社区  ›  n-alexander

获取Linux、Bash上纪元以来的当前时间(秒)

  •  866
  • n-alexander  · 技术社区  · 17 年前

    我需要一些简单的东西,比如 date ,但自1970年以来以秒为单位,而不是当前的日期、小时、分钟和秒。

    日期 似乎没有提供这种选择。有简单的方法吗?

    7 回复  |  直到 8 年前
        1
  •  1360
  •   Steef    17 年前

    这应该奏效:

    date +%s
    

    正如最近在 date manual :

        2
  •  148
  •   pellucide    8 年前

    只是补充一下。

    获取任何给定日期(例如1973年10月21日)自历元(1970年1月1日)以来的秒数。

    date -d "Oct 21 1973" +%s
    


    date --date @120024000
    


    命令 date date --help ). 显示美国西海岸下周五上午9点的当地时间

    date --date='TZ="America/Los_Angeles" 09:00 next Fri'
    

    http://man7.org/linux/man-pages/man1/date.1.html

        3
  •  47
  •   qneill Adam Burry    6 年前

    bash 5.0 ( released on 7 Jan 2019 )您可以使用内置变量 EPOCHSECONDS .

    $ echo $EPOCHSECONDS
    1547624774
    

    还有 EPOCHREALTIME

    $ echo $EPOCHREALTIME
    1547624774.371210
    

    可以通过删除小数点转换为微秒。使用时可能会感兴趣 bash 的内置算术 (( expression ))

    $ echo ${EPOCHREALTIME/./}
    1547624774371210
    

    在上述所有示例中,为了提高可读性,打印的时间值是相等的。实际上,时间值会有所不同,因为每个命令的执行时间都很短。

        4
  •  37
  •   Socowi    7 年前

    到目前为止,所有答案都使用外部程序 date .

    printf 有一个新的修饰符 %(dateformat)T -1 dateformat strftime(3) ( man 3 strftime

    printf '%(%s)T\n' -1
    

    var :

    printf -v var '%(%s)T' -1
    

    没有外部程序,也没有子shell!

    从Bash 4.3开始,甚至可以不指定 1. :

    printf -v var '%(%s)T'
    

    1. 尽管如此)。

    -2 1.

    $ printf -v beg '%(%s)T\n' -2
    $ printf -v now '%(%s)T\n' -1
    $ echo beg=$beg now=$now elapsed=$((now-beg))
    beg=1583949610 now=1583953032 elapsed=3422
    
        5
  •  27
  •   Zombo tliff    9 年前

    对于大多数Awk实现:

    awk 'BEGIN {srand(); print srand()}'
    
        6
  •  21
  •   PeqNP    12 年前

    确定任何给定日期(例如1973年10月21日)自历元(1970年1月1日)以来的秒数

    $ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
    120034800
    

    date

    $ date -j -r 120034800
    Sun Oct 21 00:00:00 PDT 1973
    

    Apple的日期实施手册页: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html

        7
  •  1
  •   comonad    11 年前

    ~/bin/epoch ):

    #!/bin/bash
    
    # get seconds since epoch
    test "x$1" == x && date +%s && exit 0
    
    # or convert epoch seconds to date format (see "man date" for options)
    EPOCH="$1"
    shift
    date -d @"$EPOCH" "$@"