man date
不会向我显示任何保留字,但它们有“现在”或“今天”等。
我想知道是否有任何明确的方法来打印当天的开始(00:00:00)。
date -u -d "$(date +'%F')"
在任何情况下都足够吗?看起来有点傻。
答案1
date -d 00:00
或者date -d 00:00:00
使用 GNU、ast-open、toybox 和 busybox 的date
.
date -d 0
也适用于 GNU date
。
$ date -d 00:00
Tue 4 Oct 00:00:00 BST 2022
使用BSD date
:
$ date -jf %H%M%S 000000
Mon Oct 4 00:00:00 BST 2022
-j
, -f
,都不-d
是 的标准选项date
。
POSIXdate
除了设置系统时钟(在 XSI 选项下)之外,没有指定除现在之外的输入日期的规定。
你可以这样做:
$ date '+%a %e 00:00:00 %Z %Y'
Tue 4 00:00:00 BST 2022
BST
但是,如果您在时钟更改为冬季时间的那天运行该部分,则该部分最终可能会出错。
ksh93
并zsh
具有解析输入日期的内置支持:
克什93
$ printf '%(%c [%s epoch time])T\n' 00:00 Tue Oct 4 00:00:00 2022 [1664838000 epoch time]
(从 ksh93
bash
复制%(format)T
,但不能指定纪元秒以外的输入日期)。ksh93 也可以使用 ast-open
date
内置函数构建。桀骜
$ zmodload zsh/datetime $ strftime -s today %F $ strftime -rs start %F $today $ strftime '%c [%s epoch time]' $start Tue 04 Oct 2022 00:00:00 BST [1664838000 epoch time]
或者使用提示扩展获取今天的日期(此处通过
%
参数扩展标志):$ zmodload zsh/datetime $ strftime -rs start %F ${(%):-%D{%F}} $ strftime '%c [%s epoch time]' $start Tue 04 Oct 2022 00:00:00 BST [1664838000 epoch time]
请注意,您的:
date -u -d "$(date +'%F')"
接受今天的日期你的时区采用 YYYY-MM-DD 格式,但随后要求date
您提供 00:00:00 的时间世界标准时间在那一天,除非您所在的时区当前恰好与 UTC 一致,否则不会是你的天。
英国大陆仍处于夏令时(比世界标准时间早一小时):
$ date -u -d "$(date +'%F')" +%s
1664841600
$ date -d 00:00 +%s
1664838000