获取当前时间(以秒为单位),巴什Linux

我需要像date这样简单的东西,但自1970年以来的秒,而不是当前的日期,小时,分钟和秒。

date似乎没有提供这个选项。有简单的方法吗?

723741 次浏览

这应该工作:

date +%s

只是添加。

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

date -d "Oct 21 1973" +%s


将秒数转换回日期

date --date @120024000


命令date非常通用。您可以使用date做的另一个很酷的事情(无耻地复制自date --help)。显示美国西海岸下周五上午9点的当地时间

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

更好的是,花一些时间阅读手册页http://man7.org/linux/man-pages/man1/date.1.html

这是对@pellucide所做工作的扩展,但对于Mac:

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

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

请注意,为了完整起见,我已将时间部分添加到格式中。原因是date将采用您提供的任何日期部分,并将当前时间添加到提供的值中。例如,如果您在下午4:19PM执行上述命令,而没有'00:00:00'部分,它将自动添加时间。这样“Oct 21 1973”将被解析为“Oct 21 1973 16:19:00”。这可能不是您想要的。

要将时间戳转换回日期:

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

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

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

从Bash 4.2开始,printf有一个新的修饰符%(dateformat)T,当与参数-1一起使用时,它输出当前日期,格式由dateformat给出,由strftime(3)处理(man 3 strftime用于有关格式的信息)。

因此,对于纯Bash解决方案:

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

或者如果您需要将结果存储在变量var中:

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

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

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

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

(但始终给出参数-1可能更明智)。

如果您使用-2而不是-1作为参数,Bash将使用shell启动的时间而不是当前日期。这可用于计算经过的时间

$ 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

使用这个bash脚本(我的~/bin/epoch):

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

对于大多数awk实现:

awk 'BEGIN {srand(); print srand()}'

纯bash解决方案

bash 5.0(发布于2019年1月7日)开始,您可以使用内置变量EPOCHSECONDS

$ echo $EPOCHSECONDS1547624774

还有EPOCHREALTIME,它包括秒的分数。

$ echo $EPOCHREALTIME1547624774.371210

EPOCHREALTIME可以通过删除小数点转换为微秒(μs)。当使用bash的内置算术(( expression ))时,这可能会很有趣,因为它只能处理整数。

$ echo ${EPOCHREALTIME/./}1547624774371210

在上面的所有示例中,打印的时间值都是相等的,以获得更好的易读性。实际上,时间值会有所不同,因为每个命令需要很少的时间来执行。