Как узнать, какой номер недели является текущим годом 16 июня (wk24) с Python?
python
datetime
week-number
Gerry
источник
источник
strftime("%U", d)
могут отличаться отisocalendar()
. Например, если вы измените год на 2004, вы получите неделю 24,strftime()
а неделю 25 -isocalendar()
.Ответы:
datetime.date
имеетisocalendar()
метод, который возвращает кортеж, содержащий календарную неделю:datetime.date.isocalendar () - это метод экземпляра, возвращающий кортеж, содержащий год, номер недели и день недели в соответствующем порядке для данного экземпляра даты.
источник
[1]
» или указали, где искать информацию.date(2010, 1, 1).isocalendar()[1]
возвращается53
. Из документов: «Например, 2004 год начинается в четверг, поэтому первая неделя ИСО 2004 года начинается в понедельник, 29 декабря 2003 года, и заканчивается в воскресенье, 4 января 2004 года, так чтоdate(2003, 12, 29).isocalendar() == (2004, 1, 1)
иdate(2004, 1, 4).isocalendar() == (2004, 1, 7)
».isocalendar()
это здорово, но будь уверен, что это то, что ты хочешь. Сегодня прекрасный пример. 01.01.2016 равняется(2015, 53, 5)
.now.strftime("%W")
иnow.strftime("%U")
равны00
которым часто то, что нужно. Примеры STRFTIMEВы можете получить номер недели непосредственно из datetime в виде строки.
Также вы можете получить различные «типы» номера недели в году, изменяя
strftime
параметр для:Я узнал об этом отсюда . У меня это работает в Python 2.7.6
источник
Invalid format string
об этом шаблоне. Их документы тоже не упоминаются%V
.%G-%V
вместо%Y-%V
.%G
годовой эквивалент ISO%Y
Я верю, что
date.isocalendar()
это будет ответом. Эта статья объясняет математику календаря ISO 8601. Проверьте часть date.isocalendar () страницы datetime в документации Python..isocalendar () возвращает 3 кортежа с (год, недельный номер, недельный день).
dt.isocalendar()[0]
возвращает год,dt.isocalendar()[1]
возвращает номер недели,dt.isocalendar()[2]
возвращает день недели. Просто, как может быть.источник
Вот еще один вариант:
который печатает
24
.Смотрите: http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
источник
Неделя ISO, предложенная другими, - хорошая, но она может не соответствовать вашим потребностям. Предполагается, что каждая неделя начинается с понедельника, что приводит к некоторым интересным аномалиям в начале и конце года.
Если вы предпочитаете использовать определение, которое гласит, что неделя 1 всегда 1 января - 7 января, независимо от дня недели, используйте деривацию, подобную этой:
источник
Как правило, чтобы получить номер текущей недели (начинается с воскресенья):
источник
Для целочисленного значения мгновенной недели года попробуйте:
источник
Существует много систем недельной нумерации . Ниже приведены наиболее распространенные системы, которые просто приведены с примерами кода:
ISO : первая неделя начинается с понедельника и должна содержать 4 января. Календарь ISO уже реализован на Python:
Северная Америка : первая неделя начинается с воскресенья и должна содержать 1 января. Следующий код является моей модифицированной версией реализации календаря Python ISO для системы в Северной Америке:
источник
Если вы используете только номер недели isocalendar через доску, этого должно быть достаточно:
Это извлекает второго члена кортежа, возвращенного isocalendar для нашего номера недели.
Однако, если вы собираетесь использовать функции даты, которые имеют дело с григорианским календарем, isocalendar один не будет работать! Возьмите следующий пример:
Строка здесь говорит, чтобы вернуть понедельник первой недели 2014 года в качестве нашей даты. Когда мы используем isocalendar для получения номера недели здесь, мы ожидаем получить тот же номер недели назад, но мы этого не делаем. Вместо этого мы получаем номер недели 2. Почему?
Неделя 1 в григорианском календаре - это первая неделя, содержащая понедельник. Неделя 1 в isocalendar - это первая неделя, содержащая четверг. Неполная неделя в начале 2014 года содержит четверг, так что isocalendar это неделя 1, а
date
неделя 2.Если мы хотим получить григорианскую неделю, нам нужно будет перейти с isocalendar на григорианский. Вот простая функция, которая делает свое дело.
источник
Вы можете попробовать директиву% W, как показано ниже:
«% W»: номер недели в году (понедельник - первый день недели) в виде десятичного числа. Все дни в новом году, предшествующем первому понедельнику, считаются неделей 0. (00, 01, ..., 53)
источник
isocalendar () возвращает неправильные значения года и номера недели для некоторых дат:
Сравните с подходом Марка Рэнсома:
источник
Я суммирую обсуждение в два этапа:
datetime
объект.datetime
объекта илиdate
объекта для вычисления номера недели.Разогрев
`` `` Питон
`` `
1-й шаг
Чтобы вручную создать
datetime
объект, мы можем использоватьdatetime.datetime(2017,5,3)
илиdatetime.datetime.now()
.Но на самом деле нам обычно нужно проанализировать существующую строку. Мы можем использовать
strptime
функцию, например,datetime.strptime('2017-5-3','%Y-%m-%d')
в которой вы должны указать конкретный формат. Детали кода различного формата можно найти в официальной документации .В качестве альтернативы, более удобный способ - использовать модуль dateparse . Примеры
dateparser.parse('16 Jun 2010')
,dateparser.parse('12/2/12')
илиdateparser.parse('2017-5-3')
Два вышеупомянутых подхода вернут
datetime
объект.2-й шаг
Используйте полученный
datetime
объект для вызоваstrptime(format)
. Например,`` `` Питон
`` `
Очень сложно решить, какой формат использовать. Лучший способ - получить
date
объект для вызоваisocalendar()
. Например,`` `` Питон
`` `
На самом деле, вы будете чаще использовать
date.isocalendar()
для подготовки еженедельного отчета, особенно в сезон покупок "Рождество-Новый год".источник
источник
Было дано много ответов, но я хотел бы добавить к ним.
Если вам нужна неделя для отображения в формате год / неделя (например, 1953 год - неделя 53 от 2019 года, 2001 год - неделя 1 от 2020 года и т. Д.), Вы можете сделать это:
Это займет текущий год и неделю, а long_week_num в день написания будет:
источник
date()
с нуля?datetime.datetime()
экземпляры имеют.date()
метод для этой работы.