2014-01-15 3 views
1

даты datetime.date(2013, 12, 30)Получить номер недели, используя дату в питоне

Я пытаюсь получить номер недели с помощью

import datetime 
datetime.date(2013, 12, 30).isocalendar()[1] 

Я получаю результат, как,

1 

Почему я не получаю недельного номера прошлого года, вместо этого я получаю номер недели текущего года?

Что я здесь делаю?

+0

Вы не совершаете ничего плохого, поэтому я не могу ответить на ваш вопрос напрямую. Вы можете проверить их с помощью isweeknumber.com и других сайтов. – SDsolar

ответ

7

Вы не делаете ничего плохого, 2013/12/30 падает на 1-й неделе 2014 года, в соответствии с ISO8601 week numbering standard:

ИСО 8601 определение недели 01 неделя с первого четверга года в нем.

Четверг на этой неделе - 2014/01/02.

Другие способы объяснить определение, из той же связанной статьи Википедии:

  • Это первая неделя с большинством (четыре или более) своих дней в январе (ISO недели начнется в понедельник)
  • Его первый день - понедельник, ближайший к 1 января.
  • В нем 4 января. Следовательно, самые ранние сроки - с 29 декабря по 4 января, с 4 по 10 января.
  • У него есть первый рабочий день в этом году, если суббота, воскресенье и 1 января не работают.

Если вы искали последнюю неделю число данного года (52 или 53, в зависимости от года), я бы использовал 28 декабря, который всегда гарантированно будет в последней неделе (потому что 4 января всегда часть первой недели следующего года):

def lastweeknumber(year): 
    return datetime.date(year, 12, 28).isocalendar()[1] 
+0

Спасибо, Тогда как я могу получить номер последней недели, используя этот метод? – fledgling

+1

@Nishant: Вы хотите, чтобы вы хотели 52, последнюю неделю в 2013 году? Я обновлю. –

+0

Да, я хочу то же самое, спасибо – fledgling

0
from datetime import date 
from datetime import datetime 
ndate='10/1/2016' 
ndate = datetime.strptime(ndate, '%m/%d/%Y').strftime('%Y,%m,%d') 
print('new format:',ndate) 
d=ndate.split(',') 
wkno = date(int(d[0]),int(d[1]),int(d[2])).isocalendar()[1] 
print(wkno) 

вручную или прочитать дату в строку и получить номер недели, поиграйте с различными форматами.

+0

Вопрос был: * «Почему я не получаю номер недели в прошлом году, вместо этого я получаю номер недели текущего года? Что я здесь делаю?» * – MarianD

+0

Предполагается, что это первая неделя 2014 года 4 января –

+0

Я не комментировал ваш код, но ваш ответ не попал в цель - код * сделан *, что не так с * его * выходом? – MarianD

Смежные вопросы