如何在Unix中根据给定日期获取星期几

10

给定一个日期,格式为%m-%d-%Y,我们需要确定是星期几。

例如:对于日期09-01-2017,输出应该是Friday


1
相关(在Bash脚本中获取星期几的数字输出而不是单词):https://dev59.com/KWAg5IYBdhLWcg3w_fHV - Pluto
6个回答

6
非常简单。只需使用正确的选项和日期命令本身即可。
$ date -j -f '%m-%d-%Y' "09-01-2017" +'%A'
Friday

4
由于这不是GNU 'date'或BSD 'date',您可能需要指定是哪种'date'。我猜是macOS? - Kusalananda

4

以下是我通常的做法。我会使用日期函数。 你可以执行 'man date' 命令来查找选项。

$ d=2020-08-20 \
$ date -d "$d" +%u \
4 \
$ date -d "$d" +%A \
Thursday

4
如果您的日期是这样的:
d="09-01-2017"

您需要重新格式化为"YYYY-MM-DD"

date -d $(echo $d|awk -F- '{print $3 "-" $1 "-" $2}') +%A # DOW 

1
+A 将输出 '星期五'。 - Juan Manuel García

3
DayOfWeek=$(date +%A)

这将产生星期几的信息 星期一至星期日。如果您的输入日期严格按照格式 MM-DD-YYYY,请使用以下格式。
IFS='-' read -ra ADDR <<< "09-01-2017"
formattedDate=${ADDR[2]}-${ADDR[0]}-${ADDR[1]}
date -d  $formattedDate +%A

第一行将日期的组件进行分词,第二行重新排列它们。

1
你可以将它作为%m/%d%Y传递,这将被date命令识别。
$ date --date="`echo 09-01-2017| sed -e 's/-/\//g' `" +'%A'
Friday

要进行验证,请传递%F以获取ISO格式

$ date --date="`echo 09-01-2017| sed -e 's/-/\//g' `" +'%A %F'
Friday 2017-09-01

-1
date +%A
# let us see in a for loop
for i in {1..7}; do date +%A --date=+${i}day; done

Wednesday
Thursday
Friday
Saturday
Sunday
Monday
Tuesday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接