从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" "$@"