2010-07-12 3 views
18

день года, как я могу получить неделю год с помощью Bash?получить неделю года с дня года

+0

Хотя вы можете получить ответ на это здесь, я думаю, что этот вопрос может быть более подходящим для нашей сестры сайта stackoverflow.com. – Chopper3

+1

Не только вопрос программирования, но и подозрительно выглядит как домашнее задание. Кстати, использование Bash для этого - хороший пример использования неправильного инструмента для работы. –

+1

+1 не используйте Bash для расчета даты. Современные машины Linux/UNIX по умолчанию будут поставляться с обновленным Python или Perl. Используйте лучший инструмент для работы. – 2010-07-12 11:07:00

ответ

33

Использование команды date, вы можете показать неделю года, используя «% V» параметр формата:

/bin/date +%V 

Вы можете сказать date для разбора и форматирования дат вместо текущего с помощью "-d" параметр:

/bin/date -d "20100215" 

Затем, смешав два варианта, вы можете применить пользовательский формат для настраиваемого даты:

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

Слишком плохо, что ваше решение работает только с версией даты GNU. Версия даты Solaris не поддерживает ключ -d и параметр формата% V. – basvdlei

+6

Также '% U' (начало в воскресенье, 00-53) или'% W' (начало понедельника, 00-53) (в дополнение к '% V' (ISO, начало понедельника, 01-53)) в зависимости от недели -numbering, которую вы используете. –

+0

Дата версии Solaris, которая не может поддерживать -d, может быть решена с заменой версии даты sunfreeware.com. – conandor

3

Если вы используете GNU date вы можете использовать относительные даты, как это:

$ doy=193 
$ date -d "Jan 1 +$((doy -1)) days" +%U 
28 

Это даст вам очень упрощенный ответ, но не полагаться на date:

$ 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 
Смежные вопросы