Pra*_*hat 11 shell string date
让我向你解释问题
$ date +%c -d "$d"
Tue 31 Dec 2013 01:13:06 PM CET
$ date +'Today is %F' -d "$d"
Today is 2013-12-31
Run Code Online (Sandbox Code Playgroud)
此解决方案对应于当前日期。
但是我有一个存储当前日期以外的日期的变量
$Prev_date="Wed Dec 25 06:35:02 EST 2013"
Run Code Online (Sandbox Code Playgroud)
我正在寻找将这个日期读取为 2013-12-25 并将其存储在变量中的解决方案。
我试过这个:
a=`date --date=$Prev_date '+%y/%m/d'`
echo $a
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:
date: illegal option -- date=Wed
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
Run Code Online (Sandbox Code Playgroud)
rep*_*lay 11
我假设你在谈论 Bash。如果是这样,那么您缺少"
参数的--date
参数周围。
代替
a=`date --date=$Prev_date '+%y/%m/d'`
Run Code Online (Sandbox Code Playgroud)
尝试这个
a=`date --date="$Prev_date" '+%y/%m/d'`
Run Code Online (Sandbox Code Playgroud)
我猜d
应该有一个%
. 那么它会是这样的:
a=`date --date="$Prev_date" '+%y/%m/%d'`
Run Code Online (Sandbox Code Playgroud)
您的错误向您显示 date 命令的用法的原因如下:
如果没有"
around $Prev_date
,变量将被替换,命令如下所示:
a=`date --date=Wed Dec 25 06:35:02 EST 2013 '+%y/%m/d'`
Run Code Online (Sandbox Code Playgroud)
因此,只有Wed
被作为 的参数--date
,而$Prev_date
字符串的所有其他部分都被视为 date 命令的单独参数。所以 date 说它不知道调用的参数Dec
并向您显示它的帮助输出。
该-d
选项是特定于 GNU 的。
在这里,你不需要做日期计算,只需重写已经包含所有信息的字符串:
a=$(printf '%s\n' "$Prev_date" | awk '{
printf "%04d-%02d-%02d\n", $6, \
(index("JanFebMarAprMayJunJulAugSepOctNovDec",$2)+2)/3,$3}')
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,您想要保存日期,以便以后可以重复使用它以不同的格式打印相同的日期。为此,我建议将日期保存为易于命令解析的格式date -d
,并让date
命令进行格式化。
据我所知,该格式+%Y%m%d %H:%M:%S
是最独立于平台的。因此,让我们以这种格式保存日期:
d=$(date '+%Y%m%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
然后您可以以不同的格式打印该日期,例如:
$ date +%c -d "$d"
Tue 31 Dec 2013 01:13:06 PM CET
$ date +'Today is %A' -d "$d"
Today is Tuesday
$ date +'Today is %F' -d "$d"
Today is 2013-12-31
Run Code Online (Sandbox Code Playgroud)
更新
如果给您一个像 之类的日期字符串Wed Dec 25 06:35:02 EST 2013
,那么您可以尝试使用 解析它date -d
并更改其格式,例如:
$ date +%F -d 'Wed Dec 25 06:35:02 EST 2013'
2013-12-25
Run Code Online (Sandbox Code Playgroud)
这适用于 GNU 日期。如果它在您的系统中不起作用,您可以尝试该gdate
命令,通常它存在于现代系统中。