从Epoch on Linux,Bash获得当前时间
我需要一些像date
一样简单的东西,但是从1970年开始,而不是现在的date,时间,分钟和秒钟。
date
似乎没有提供该选项。 有一个简单的方法吗?
这应该工作:
date +%s
只需添加。 如果你想在任何给定的date(例如1973年10月21日)获得自1970年1月1日以来的秒数。
date -d "Oct 21 1973" +%s
将秒数转换回date
date --date @120024000
命令date
相当通用。 另一个很酷的事情,你可以做的date(无耻复制date --help
)。 显示美国西海岸下周五上午9点的当地时间
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
更好的是,花些时间阅读手册页http://www.manpages.info/linux/date.1.html
到目前为止,所有的答案都使用外部程序date
。
自Bash 4.2以来, printf
有一个新的修饰符%(dateformat)T
,当与参数-1
一起使用时,输出格式为dateformat
格式的当前date,由strftime(3)
( man 3 strftime
有关格式信息)处理。
所以,对于纯粹的Bash解决scheme:
printf '%(%s)T\n' -1
或者如果您需要将结果存储在variablesvar
:
printf -v var '%(%s)T' -1
没有外部程序,也没有子壳!
自Bash 4.3以来,甚至有可能不指定-1
:
printf -v var '%(%s)T'
(但总是给出参数-1
可能更明智)。
如果使用-2
作为参数而不是-1
,Bash将使用shell启动的时间而不是当前date(但为什么要这么做?)。
这是@pellucide所做的扩展,但是对于Mac:
为了确定在任何给定date(例如1973年10月21日)以来的时间(1970年1月1日)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s" 120034800
请注意,为了完整起见,我在格式中添加了时间部分。 原因是, date
将采取您给它的任何date部分,并将当前时间添加到提供的值。 例如,如果您在下午4:19执行上述命令,而没有“00:00:00”部分,则会自动添加时间。 这样“1973年10月21日”将被parsing为“1973年10月21日16:19:00”。 这可能不是你想要的。
将您的时间戳转换回date:
$ date -j -r 120034800 Sun Oct 21 00:00:00 PDT 1973
苹果的date实施手册页面: https : //developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
对于大多数的Awk实现:
awk 'BEGIN {srand(); print srand()}'
使用这个bash脚本( ~/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" "$@"