date
,但是自1970年以来而不是当前日期,小时,分钟和秒。
date
似乎没有提供该选项。有一种简单的方法吗?
将秒钟的秒数转换为日期
date --date @120024000
命令date
date --help
)。
在下周五上午9点在US的西海岸展示当地时间
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
the,请花一些时间阅读男人页面http://man7.org/linux/man-pages/man1/date.1.html PUREBASH解决方案
sincebash
5.0(2019年1月7日发行)您可以使用内置变量
EPOCHSECONDS
$ echo $EPOCHSECONDS
1547624774
也有包括秒的分数。
EPOCHREALTIME
$ echo $EPOCHREALTIME
1547624774.371210
可以通过删除小数点(或逗号,如果您的语言环境是法语,德语等)将其转换为微秒(μs)
EPOCHREALTIME
只能处理整数。
bash
在上面的所有示例中,印刷时间值都相等,以获得更好的可读性。实际上,时间值会有所不同,因为每个命令需要少量时间才能执行。
到目前为止,所有答案都使用外部程序(( expression ))
。
sincebash 4.2,
$ echo ${EPOCHREALTIME/[^0-9]/}
1547624774371210
有一个新的修饰符date
当与参数一起使用时,printf
输出当前日期,由%(dateformat)T
给出的格式,由
-1
处理(
dateformat
strftime(3)
或如果您需要将结果存储在变量man 3 strftime
:
printf '%(%s)T\n' -1
没有外部程序,没有子壳!
从bash 4.3,甚至不可能不指定
var
::
printf -v var '%(%s)T' -1
(但是总是提出论点可能是明智的。
如果您将
-1
用作参数,而不是
printf -v var '%(%s)T'
-1
,则BASH将使用shell启动的时间而不是当前日期。 这可以用于计算经过的时间
-2
最尴尬的实现:
-1
这是@pellucide所做的事情的扩展,但对于Macs:
确定任何给定日期(例如1973年10月21日)以来时代以来(1970年1月1日)的秒数
$ 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
请注意,为了完整,我将时间零件添加到了格式中。原因是
awk 'BEGIN {srand(); print srand()}'
将采用您给它的任何日期部分,并将电的时间添加到提供的值。例如,如果您在下午4:19执行上述命令,则没有'00:00:00'零件,它将自动添加时间。这样的“ 1973年10月21日”将被解析为“ 1973年10月21日16:19:00”。那可能不是你想要的。将您的时间戳转换回日期:
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
apple的人页面以进行日期实施:
https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/date.1.html
使用此bash脚本(我的
date
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973