Get current time in seconds since the Epoch on Linux, Bash
我需要一些简单的东西,比如
这应该有效:
1 | date +%s |
只是补充一下。获取任意给定日期(例如1973年10月21日)的epoch(1970年1月1日)以来的秒数。
1 | date -d"Oct 21 1973" +%s |
号
将秒数转换回日期
1 | date --date @120024000 |
命令
1 | date --date='TZ="America/Los_Angeles" 09:00 next Fri' |
。
更好的是,花点时间看一下手册页http://man7.org/linux/man-pages/man1/date.1.html
到目前为止,所有答案都使用外部程序
自bash 4.2以来,
因此,对于纯bash解决方案:
1 2 | printf '%(%s)T ' -1 |
。
或者,如果需要将结果存储在变量
1 | printf -v var '%(%s)T' -1 |
没有外部程序和子程序!
由于bash 4.3,甚至可能不指定
1 | printf -v var '%(%s)T' |
。
(不过,最好还是把这一论点用在第十一条〔六〕上)。
如果您使用
对于大多数awk实现:
1 | awk 'BEGIN {srand(); print srand()}' |
。
这是对@pellucide所做工作的扩展,但对macs而言:
确定任何给定日期(例如1973年10月21日)自epoch(1970年1月1日)以来的秒数。
1 2 | $ date -j -f"%b %d %Y %T""Oct 21 1973 00:00:00""+%s" 120034800 |
请注意,为了完整起见,我在格式中添加了时间部分。原因是
要将时间戳转换回日期:
1 2 | $ date -j -r 120034800 Sun Oct 21 00:00:00 PDT 1973 |
。
苹果的日期执行手册:https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/date.1.html网站
纯bash溶液
由于
1 2 | $ echo $EPOCHSECONDS 1547624774 |
号
还有
1 2 | $ echo $EPOCHREALTIME 1547624774.371215 |
号
1 2 | $ echo ${EPOCHREALTIME/./} 1547624774371215 |
号
在上面的所有示例中,打印的时间值都是相等的,以提高可读性。实际上,时间值会有所不同,因为执行每个命令需要很短的时间。
使用这个bash脚本(my
1 2 3 4 5 6 7 8 9 | #!/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""$@" |