如何使用SHELL SCRIPT从简单日期字符串(YYYYMMDD)获取YEAR信息?

时间:2018-11-19 21:10:42

标签: string shell date date-formatting

当我运行此命令以从日期“ 20181102 ”(格式: YYYYMMDD )获取年份信息时,它工作正常:

$ echo $(date --date="20181102" +"%Y")
2018

但是当我尝试使用其他日期“ 20181104 ”时,出现错误:

$ echo $(date --date="20181104" +"%Y")
date: invalid date ‘20181104’

这是任何错误吗?还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

GNU date实用程序有点粗糙,并且不断误解输入字符串。为了达到良好的效果,请尝试始终在date秒之后的@秒内给出日期,或者以man date中的一种形式给出日期,例如"2004-02-29 16:21:42"。 (除非您有freebsd date且具有-f选项。)

str=20181102
date --date="$(echo "$str" | cut -c 1-4)-$(echo "$str" | cut -c 5,6)-$(echo "$str" | cut -c 7,8) 00:00:00" +%Y

但是实际上,如果您知道年份的前4个字符,为什么不仅仅获得前4个字符?

str=20181102
echo "$str" | cut -c 1-4

还要注意,进行echo $(date ...)是没有意义的。只是date ...。完全不需要echo