Exibe todas as datas em números de semana no UNIX [closed]

1

Eu sei que o comando para obter o número da semana de uma data é date +%W

Saída: 03

Agora, existe uma maneira de fornecer um número de semana para exibir todas as datas dessa semana? Ou devo escrever um roteiro?

Por exemplo:

Entrada: 03

Saída:

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

A primeira semana (1, 2, 3, e 5 de janeiro) é considerada como a semana sem '0'. Então, a primeira semana começa no dia 6 de janeiro (primeira segunda-feira de janeiro de 2014), a segunda semana começa no dia 13 e a terceira semana começa no dia 20

    
por Rakesh K 21.01.2014 / 09:54

2 respostas

1

Eu decidi copiar este stackoverflow question e adapte-o ainda à sua pergunta:

#!/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

Exemplo: weekof 17 2014 Resultado:

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

Espero que ajude!

    
por 21.01.2014 / 10:37
2

ncal -w fornece números de semana e você pode analisar a saída usando awk .

O que achei mais fácil é instalar o pacote python-dateutil e usar:

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)

Isso fornece os 7 dias com base no número da semana ISO .

    
por 21.01.2014 / 10:42

Tags