我在bash shell脚本中尝试使用$(date)
,但是我想要的日期格式是YYYY-MM-DD
。
我该如何获取?
我在bash shell脚本中尝试使用$(date)
,但是我想要的日期格式是YYYY-MM-DD
。
我该如何获取?
date
(通常是GNU date)。请注意,在Cygwin中调用子shell存在性能问题,这是由于Windows上较慢的fork()
调用所致。# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1
# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1
# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal
# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')
# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')
# print current date directly
echo $(date '+%Y-%m-%d')
其他可用的日期格式可以从date man pages(供外部非bash特定命令使用)查看:
man date
:
转换为/
,导致您得到一个像2016-09-15 11/05/00
这样非常令人困惑的字符串。 - beporterdate=$(date)
而非 date=\
date``。此外,不要使用大写字母来定义您的私有变量;大写字母的变量名已保留给系统使用。 - tripleee尝试: $(date +%F)
%F
选项是%Y-%m-%d
的别名
zsh
中同样适用。 - Glen K$ date +'%Y-%m-%d'
$(date +%F)
输出
2018-06-20
或者如果您也需要时间:
$(date +%F_%H-%M-%S)
可以用来移除中间的冒号(:)。
输出。2018-06-20_09-55-58
%T
也是 %H:%M:%S
的有用别名。 - mgutt$(date '+%F_%T')
。 - Teun M.$(date -I)
gdate -I
可以正常工作。 - Joel Purradate
的文档中有-I
选项的说明,但它确实相当于date +%F
。 - chepnerdate -d '1 hour ago' '+%Y-%m-%d'
输出结果会是2015-06-14
。
最近的Bash(版本≥4.2)中,您可以使用内置的printf
命令和格式修饰符%(strftime_format)T
:
$ printf '%(%Y-%m-%d)T\n' -1 # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1 # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1 # Capture as var $date
printf
比date
快得多,因为它是Bash内置命令,而date
是外部命令。
此外,printf -v date ...
比date=$(printf ...)
更快,因为它不需要fork一个子shell。
date
命令要快得多,因为它不需要加载任何额外的库。(*在我的Linux服务器上,我测量出在1000次迭代中,速度差异约为160倍) - timtjprintf -v date
不派生子 shell 的评论加上 +5。非常好的信息!! - timtj我使用以下表述:
TODAY=`date -I`
echo $TODAY
请查看 date
命令的 man 手册,其中包括许多其他有用的选项:
man date
如果您想将年份以两位数格式表示,例如17而不是2017,请执行以下操作:
DATE=`date +%d-%m-%y`
ubuntu@apj:/tmp$ datevar=$(date +'%Y-%m-%d : %H-%M')
ubuntu@apj:/tmp$ echo $datevar
2022-03-31 : 10-48
date -I
就是你需要的全部内容。我花了好几年才偶然发现这个命令。 - Sridhar Sarnobatdate -I
只适用于 Linux 上的 GNU 工具,并不适用于 macOS/ BSD。安装 brew 后,运行brew install coreutils
即可使用gdate -I
命令。 - ssc