我尝试在下面执行此操作,但日期有一个错误:无效的日期'10 / 04/2019'
#Ask for the date to search
#echo "Date to look for dd/mm/yyyy"
read -p "Date to look for:" InitDate
echo $InitDate
#convert the date to yyyy-mm-dd
InitDate1=$(date -d $InitDate '+%Y%m%d')
echo $InitDate1
如何在变量中将10/04/2019转换为20190419。
答案 0 :(得分:2)
GNU的date
实用程序有点奇怪,它的--date
参数接受各种奇怪的输入,并且不接受各种各样的“看起来不错”的输入。
来自man date
:
The --date=STRING is a mostly free format human readable date string
such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or
even "next Thursday". ...
并尝试仅使用该格式。在您的情况下,我会这样做:
IFS='/' read -r day mon year <<<"$InitDate"
InitDate1=$(date --date "$year-$month-$day 00:00:00" '+%Y%m%d')
您还可以使用例如bash子字符串(例如ex)提取day
,mon
和year
路径。 day=${InitDate:1:4} mon=${InitDate:5:2} year=${InitDate:7:2}
但是由于您已经拥有yyyy
,mm
和dd
格式的日期,因此完全不需要使用date
。只是:
IFS='/' read -r day mon year <<<"$InitDate"
echo "$year$mon$day"
答案 1 :(得分:0)
如果您要做的只是重新排列字符串中的日/月/年,则可以通过字符串操作轻松完成。例如:
echo '10/04/2019' | sed -E 's/([0-9]+)\/([0-9]+)\/([0-9]+)/\3\2\1/'
如果您确实需要将其导入到date
实用程序中(进行更高级的转换,例如自转换以来数秒),则应查看手册页,因为实现因系统而异。
答案 2 :(得分:0)
感谢您的帮助。
我已经做到了:
<code>
#!/bin/sh
#ask the date
read -p "Date a rechercher:" InitDate
#conversion
InitDate1=$(echo $InitDate | sed -E 's/([0-9]+)\/([0-9]+)\/([0-9]+)/\3-\2-\1/')
echo $InitDate1
InitDate2=$(echo $InitDate | sed -E 's/([0-9]+)\/([0-9]+)\/([0-9]+)/\3\2\1/')
echo $InitDate2
</code>
尼古拉斯