Date

在 UNIX 中以周數顯示所有日期

  • April 16, 2019

我知道獲取日期週數的命令是date +%W

輸出:03

現在,有沒有辦法給出一個星期數,它將顯示該週的所有日期?還是我應該寫一個腳本?

例如:

輸入:03

輸出:

Jan 20
Jan 21
Jan 22
Jan 23
Jan 24
Jan 25
Jan 26

第一周(1 月 1 日、2 日、3,4 和 5 日)被視為第 0 週。所以第一周從 1 月 6 日開始(2014 年 1 月的第一個星期一),第二週從 13 日開始,第三週從 20 日開始

我決定撕掉這個stackoverflow問題並進一步適應你的問題:

#!/bin/bash
week=$1 year=$2
date_fmt="+%b %d"

week_num_of_Mon_1=$(date -d $year-01-01 +%W)
week_day_of_Mon_1=$(date -d $year-01-01 +%u)

if ((week_num_of_Mon_1)); then
  first_Mon=$year-01-01
else
  first_Mon=$year-01-$((01 + (7 - week_day_of_Mon_1 + 1) ))
fi

for nr_of_day_of_week in 0 1 2 3 4 5 6
do
   day_of_week=$(date -d "$first_Mon +$((week - 1)) week + $nr_of_day_of_week day" "$date_fmt")
   echo $day_of_week
done

範例:weekof 17 2014 結果:

Apr 28
Apr 29
Apr 30
May 01
May 02
May 03
May 04

ncal -w給你周數,你可以使用解析輸出awk

我發現更容易的是安裝python-dateutil軟體包並使用:

import sys, datetime
from dateutil.relativedelta import relativedelta, MO

week = int(sys.argv[1])
if len(sys.argv) == 2:
   year = datetime.date.today().year
else:
   year = int(sys.argv[2])

beginning = datetime.date(year, 1, 1) + \
   relativedelta(day = 4, weekday = MO(-1), weeks = week-1)

for i in range(7):
   print beginning
   beginning += datetime.timedelta(1)

這為您提供了基於ISO週數的 7 天。

引用自:https://unix.stackexchange.com/questions/110227