在mac中,date -vmon将将当前日期转换为周一的日期,date +%w将显示一周中的一天。
比如说,我的输入日期是9/14/16,格式是mm/dd/yy。如何将此字符串模式转换为date对象,以便在其上执行日期函数(如-vmon和+%w )。
我尝试了以下方法:startDate=$(date -jf "%m/%d/%y" "9/14/16"),然后尝试执行$startDate +"%w",但它不起作用。我怀疑startDate不是日期和实际字符串。
如何将字符串转换为date,以便对其执行日期操作?
编辑:这样做的要求是:假设输入日期是给定的。然后对应于那个日期,我想得到周的开始和结束的日期,即星期一和星期五的日期。然后我想知道下个星期的星期一和星期五的日期。我该怎么做?
发布于 2016-09-15 17:21:44
您需要使用date两次,一次用于将字符串输入转换为“划时代时间”(自Epoch -又名1970-01-01 : 00:00:00 :00:00:00:00)以来的秒数,以及一次将一个划时代的时间转换为您选择的输出格式:
rdate="9/14/16"
epoch_time=$(date -j -f '%m/%d/%y' "$rdate" +'%s')
date -j -vmon -r "$epoch_time"
date -j -vfri -r "$epoch_time" +'%w'这给了我输出:
Mon Sep 12 10:14:44 PDT 2016
5注意,星期五是一周中的第五天,所以输出是正确的。当您指定%w -vdow时,它的使用似乎有点争议;您知道输出将为5,但您也可以使用您需要的任何其他格式字符。
注意,时间部分默认为当前时间。您可以将00:00:00添加到转换日期,将%H:%M:%S添加到转换格式(-f参数)以处理午夜等。
您可以将其合并到一个命令行中:
$ date -j -vmon -r $(date -j -f '%m/%d/%y %H:%M:%S' "$rdate 00:00:00" +'%s') +'%Y-%m-%d %H:%M:%S %w %s'
2016-09-12 00:00:00 1 1473663600
$Mac上的date手册页上的最后一个示例提到了%s格式说明符,这是使其工作的关键。嗯,还有两次使用date。
请注意,手册页提供了概要:
date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt]
date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
date [-jnu] -f input_fmt new_date [+output_fmt]
date [-d dst] [-t minutes_west]“使用”消息不太有用:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]使用信息并不显示您不能将-f与-r或-v一起使用,而手册则表明您不能使用。
测试:MacOSX10.11.6 El Capitan
https://stackoverflow.com/questions/39513343
复制相似问题