San*_*bar 1 macos bash date sh
在 mac osx bsd 中,date -vmon将当前日期转换为星期一的日期并date +%w显示星期几。
比如说,我以 mm/dd/yy 的格式输入日期 9/14/16。我怎么能这个字符串模式转换为日期对象,这样我可以像执行日期函数-vmon,并+%w在其上。
我尝试了以下操作:startDate=$(date -jf "%m/%d/%y" "9/14/16")然后尝试执行$startDate +"%w"但它不起作用。我怀疑 startDate 不是日期,实际上是字符串。
如何将字符串转换为日期以便对其执行日期操作?
编辑:这样做的要求是:假设给出了输入日期。然后对应于该日期,我想获得一周的开始和结束工作日期,即星期一的日期和星期五的日期。然后我想得到下周星期一的日期和星期五的日期。我怎样才能做到这一点?
您需要使用date两次,一次将字符串输入转换为“纪元时间”(自大纪元以来的秒数 - 又名 1970-01-01 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'
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
Mon Sep 12 10:14:44 PDT 2016
5
Run Code Online (Sandbox Code Playgroud)
请注意,星期五是一周的第 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
$
Run Code Online (Sandbox Code Playgroud)
dateMac OS X手册页上的最后一个示例提到了%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]
Run Code Online (Sandbox Code Playgroud)
“使用”消息不太有用:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Run Code Online (Sandbox Code Playgroud)
使用消息并未显示您不能使用-fwith-r或-v,而手册中明确说明您不能使用。
测试:Mac OS X 10.11.6 El Capitan
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |