Bash 如何转换日期,例如;“年月日”;将变量存储到";年月日;shell脚本

Bash 如何转换日期,例如;“年月日”;将变量存储到";年月日;shell脚本,bash,shell,date,scripting,Bash,Shell,Date,Scripting,我将日期存储在一个变量中,格式为d/mm/yy比如6/09/17。我想将其与另一个变量中存储的dd/mm/yy格式的日期进行比较,例如06/09/17 如果我直接比较这两个变量,它们并不相等,但它们应该相等 有人能建议如何将第一个变量中的日期转换为另一个变量中存储的日期格式,即从d/mm/yy转换为dd/mm/yy?您可以使用日期转换为您喜欢的格式: date --date="6/09/17" +"%d/%m/%Y" 产出: 09/06/2017 要比较日期,它们应转换为iso格式yyyy

我将日期存储在一个变量中,格式为
d/mm/yy
比如
6/09/17
。我想将其与另一个变量中存储的
dd/mm/yy
格式的日期进行比较,例如
06/09/17

如果我直接比较这两个变量,它们并不相等,但它们应该相等


有人能建议如何将第一个变量中的日期转换为另一个变量中存储的日期格式,即从
d/mm/yy
转换为
dd/mm/yy

您可以使用日期转换为您喜欢的格式:

date --date="6/09/17" +"%d/%m/%Y"
产出:

09/06/2017

要比较日期,它们应转换为iso格式yyyy mm dd

date0=6/09/17
year0=${date0##*/}     # remove longest prefix "*/" = "6/09/" -> "17"
tmp=${date0%/*}        # remove shortest suffix "/*" = "/17"  -> "6/09"
month0=${tmp##*/}      # remove longest prefix "*/" = "6/" -> "09"
day0=${tmp%/*}         # remove shortest suffix "/*" = "/09"  -> "6"

printf -v date1 "%4d-%02d-%02d" "20${year0#0}" "${month0#0}" "${day0#0}"

echo "$date1"
或者更清晰,但可能效率更低

IFS=/ read dd mm yy <<< 6/09/17
printf -v date1 "%4d-%02d-%02d" "20${yy#0}" "${mm#0}" "${dd#0}"
echo "$date1"

IFS=/read dd-mm-yy对于只有前导零缺失且使用Bash的特殊情况,可以使用
=~
运算符:

$ query=6/09/17
$ match=06/09/17
$ [[ $match =~ ^0?$query ]] && echo yes
yes
$ [[ $query =~ ^0?$query ]] && echo yes
yes
不匹配:

$ fail=16/09/17
$ [[ $fail =~ ^0?$query ]] && echo yes
dat=“6/09/2017
dat1=“06/09/2017”
awk-v dat1=$dat-v dat=$dat'{split(dat,datarr,“/”);split(dat1,datarr1,“/”);if(length(datarr1[1])==1{dat1=“0”dat1}if(length(datarr1[1])==1{dat=“0”dat}if(dat1==dat){exit 0}else{exit}日期:非法选项--date 6/09/17用法:date mmhhmm[-u]ddhhmm[.ddhhmm][.cc]date date[-ssf[-ffu]
dat="6/09/2017
dat1="06/09/2017"
awk -v dat1=$dat -v dat=$dat '{ split(dat,datarr,"/");split(dat1,datarr1,"/");if (length(datarr1[1])==1) { dat1="0"dat1 } if (length(datarr1[1])==1) { dat="0"dat } if (dat1==dat) { exit 0 } else { exit 1 } }' <<< ""
if [ "$?" == "0" ]
then
     echo "match"
else
     echo "No match"
fi