Кажется, что strptime создает неправильную дату с номера недели
Кажется, что strptime создает неправильную дату с номера недели …
Первый случай:
dt1 = dateutil.parser.parse('2016-01-04 00:00:00+01:00') dt1.isocalendar() => (2016, 1, 1) # (year, week number, week day) from datetime import datetime datetime.strptime('2016 1 1', '%Y %W %w') => datetime.datetime(2016, 1, 4, 0, 0) # OK
Второй случай:
dt1 = dateutil.parser.parse('2015-12-28 00:00:00+01:00') dt1.isocalendar() => (2015, 53, 1) # (year, week number, week day) datetime.strptime('2015 53 1', '%Y %W %w') => datetime.datetime(2016, 1, 4, 0, 0) # Should return datetime.datetime(2015, 12, 28, 0, 0)
Что не так ?
- strftime в __del__ вызывает ошибку importlib
- Часы, дата, подсчет количества дней
- Проверьте, соответствует ли строка даты в формате ISO 8601
- Дата 6 месяцев в будущее
- Невозможно преобразовать «00:30 AM» в 24 часа с помощью strptime python
strptime %W
использует обычные календарные недели. Дата недели ISO отличается от обычного календаря. Годы делятся на 52 или 53 недели ровно (364 или 371 день).
В настоящее время python strptime не поддерживает выходные дни iso, но он запланирован для python 3.6. Затем вы можете использовать %G %V %w
(я думаю), чтобы анализировать выходные дни iso. http://bugs.python.org/issue12006
До тех пор вы можете использовать пакет isoweek для синтаксического анализа недельных дат. https://pypi.python.org/pypi/isoweek/
Дело здесь, когда вы даете
from datetime import datetime print(datetime.strptime('2015 52 1', '%Y %W %w')) o/p : 2015-12-28 00:00:00
вы получите вышеупомянутый день.
%W The week number of the year (Monday as the first day of the week) as a decimal number [00,53]; leading zeros are permitted but not required.
это займет первый день с понедельника.
Когда вы попробуете это
from datetime import datetime print(datetime.strptime('2015 1 1', '%Y %W %w'))
Он сказал бы 2015-01-05 00:00:00
. Итак, когда мы придем к 53 неделе 2015 года. Функции strptime берут первый понедельник в 2016 году. Таким образом, вы получаете 4-01-2016.
Обновление :
Когда вы попробуете это
from datetime import datetime print(datetime.strptime('2015 52 1', '%Y %W %w')) o/p : 2015-12-28 00:00:00
которая является последней неделей 2015 года.
from datetime import datetime print(datetime.strptime('2015 53 1', '%Y %W %w')) print(datetime.strptime('2016 1 1', '%Y %W %w'))
Эти два дадут вам тот же результат.
- Pandas dataframe.apply () неправильное использование значений для столбцов данных
- Почему кросс-спектры отличаются в mlab и scipy.signal?
- Преобразовать объект datetime.date в объект datetime.datetime с нулями для любых отсутствующих атрибутов времени
- как построить время по оси Y в формате «% H:% M» в matplotlib?
- python сравнивает datetimes с разными часовыми поясами
- Каков наилучший способ сохранить значение timedelta python в mysql?
- python dataframe конвертировать число недель в месяц
- Python: получить минутное перекрытие между диапазоном времени
- Разбор понятных для человека повторяющихся дат в Python
- Средний день года по декабрь-январь
- Сохранение локального дат-времени компенсирует время на 4 минуты