协慌网

登录 贡献 社区

获取自 Linux 上的纪元 Bash 以来的当前时间(以秒为单位)

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

date似乎不提供该选项。有没有简单的方法?

答案

这应该工作:

date +%s

只是添加。

获取自给定日期(例如 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

到目前为止,所有答案都使用外部程序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

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

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

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

(但是始终将参数-1为更明智)。

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

$ 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