Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从一年中的某一天开始获取一年中的某一周_Bash_Solaris_Date - Fatal编程技术网

Bash 从一年中的某一天开始获取一年中的某一周

Bash 从一年中的某一天开始获取一年中的某一周,bash,solaris,date,Bash,Solaris,Date,给定一年中的某一天,如何使用Bash获取一年中的某一周?使用命令,可以使用“%V”格式参数显示一年中的某一周: /bin/date +%V /bin/date -d "20100215" 您可以告诉date使用“-d”参数解析和格式化自定义日期,而不是当前日期: /bin/date +%V /bin/date -d "20100215" 然后,混合使用这两个选项,可以将自定义格式应用于自定义日期: /bin/date -d "20100215" +%V 如果您使用的是GNUdate,则

给定一年中的某一天,如何使用Bash获取一年中的某一周?

使用命令,可以使用“%V”格式参数显示一年中的某一周:

/bin/date +%V
/bin/date -d "20100215"
您可以告诉
date
使用“-d”参数解析和格式化自定义日期,而不是当前日期:

/bin/date +%V
/bin/date -d "20100215"
然后,混合使用这两个选项,可以将自定义格式应用于自定义日期:

/bin/date -d "20100215" +%V

如果您使用的是GNU
date
,则可以使用如下相对日期:

$ doy=193
$ date -d "Jan 1 +$((doy -1)) days" +%U
28
这将给您一个非常简单的答案,但不依赖于
日期

$ echo $((doy / 7))
它不注意一周中的哪一天

以下是周编号系统的演示:

$ printf "\nDate\t\tDOW\tDOY\t%%U %%V %%W\n"; \
for d in "Jan "{1..4}" 2010" \
"Dec "{25..31}" 2010" \
"Jan "{1..4}" 2011"; \
do printf "%s\t" "$d"; \
date -d "$d" +"%a%t%j%t%U %V %W"; \
done

Date            DOW     DOY     %U %V %W
Jan 1 2010      Fri     001     00 53 00
Jan 2 2010      Sat     002     00 53 00
Jan 3 2010      Sun     003     01 53 00
Jan 4 2010      Mon     004     01 01 01
Dec 25 2010     Sat     359     51 51 51
Dec 26 2010     Sun     360     52 51 51
Dec 27 2010     Mon     361     52 52 52
Dec 28 2010     Tue     362     52 52 52
Dec 29 2010     Wed     363     52 52 52
Dec 30 2010     Thu     364     52 52 52
Dec 31 2010     Fri     365     52 52 52
Jan 1 2011      Sat     001     00 52 00
Jan 2 2011      Sun     002     01 52 00
Jan 3 2011      Mon     003     01 01 01
Jan 4 2011      Tue     004     01 01 01

虽然你可能会在这里得到答案,但我认为这个问题可能更适合我们的姐妹网站stackoverflow.com。这不仅是一个编程问题,而且在我看来似乎像是家庭作业。顺便说一句,使用Bash是在作业中使用错误工具的一个很好的例子。+1不要使用Bash进行日期计算-现代Linux/UNIX机器将默认附带最新的Python或Perl。使用最好的工具来完成这项工作。糟糕的是,你的解决方案只适用于GNU版本的date。Solaris版本的日期不支持-d开关和%V格式选项。此外,还支持
%U
(周日开始,00-53)或
%W
(周一开始,00-53)(除了
%V
(ISO,周一开始,01-53))这取决于您使用的周编号系统。Solaris版本的日期,无法支持-d的问题可以通过替换Mac OS X上的sunfreeware.com版本date.Works来解决