获取自Linux上的Epoch以来的当前时间,Bash

这篇博客讨论了如何在Bash中获取自1970年1月1日(即Unix纪元)以来的秒数,提供了多种纯Bash解决方案,包括使用内置命令和技巧,避免依赖外部程序。还提到了不同Bash版本中可用的不同选项,并且提醒用户注意时间戳的精度和时间的自动添加问题。
摘要由CSDN通过智能技术生成

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

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


#1楼

这应该工作:

date +%s

#2楼

只是补充一下。

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

date -d "Oct 21 1973" +%s


将秒数转换回日期

date --date @120024000


命令date非常灵活。 你可以用日期做的另一件很酷的事情(从date --help无耻地复制date --help )。 显示下周五上午9点在美国西海岸的当地时间

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

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


#3楼

这是@pellucide所做的扩展,但对于Macs:

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

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

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

要将时间戳转换回日期:

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

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


#4楼

到目前为止,所有答案都使用外部计划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将使用shell启动的时间而不是当前日期(但为什么要这样?)。


#5楼

使用这个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" "$@"

#6楼

大多数Awk实现:

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

#7楼

纯粹的bash解决方案

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

$ echo $EPOCHSECONDS
1547624774

还有EPOCHREALTIME ,包括几秒钟。

$ echo $EPOCHREALTIME
1547624774.371215

通过删除小数点,可以将EPOCHREALTIME转换为微秒(μs)。 当使用bash的内置算法(( expression )) ,这可能是有意义的,它只能处理整数。

$ echo ${EPOCHREALTIME/./}
1547624774371215

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值