Сравнение дат\времени в Python [закрыт]
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
Закрыт 1 год назад .
Я с API получаю случайное время в формате ISO8601 (2021-01-29T21:33:04.836603Z) Как с помощью Python проверить, значение полученного времени позже или раньше от времени в настоящий момент минус 2 недели. Другими словами, мне нужно только то время, которое входит в промежуток от сегодня, до двух недель назад.
Отслеживать
задан 4 фев 2022 в 9:40
Просто Аккаунт Просто Аккаунт
47 1 1 серебряный знак 6 6 бронзовых знаков
Разделите задачу на подзадачи: 1) Получить дату 2) Вычесть из даты период 3) Сравнить даты
4 фев 2022 в 9:46
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если вы получаете время в формате ISO8601, c использованием UTC смещения, то и работать дальше неверное захотите в этом формате. Поэтому:
dt1=datetime.datetime.strptime('2021-01-29T21:33:04.836603Z', "%Y-%m-%dT%H:%M:%S.%fZ") dt3=datetime.datetime.now().utcnow() dt4=dt3-datetime.timedelta(days=14) print(dt1,dt4) if dt4>dt1: print('Вышли за диапазон') else: print('Остались в диапазоне')
2021-01-29 21:33:04.836603 2022-01-21 10:38:34.406008 Вышли за диапазон
dt1=datetime.datetime.strptime('2022-01-29T21:33:04.836603Z', "%Y-%m-%dT%H:%M:%S.%fZ")
то результат получим:
2022-01-29 21:33:04.836603 2022-01-21 10:41:59.984071 Остались в диапазоне
Если же захотите сначала перейти к датам без UTC смещения, то все делается по аналогии, но вместо метода .utcnow() используете метод .now().
Отслеживать
ответ дан 4 фев 2022 в 10:27
11.6k 2 2 золотых знака 10 10 серебряных знаков 16 16 бронзовых знаков
Если ничего не поменялось, то распаристь стандартной библиотеой datetime формат ISO8601 не получится.
Caution This does not support parsing arbitrary ISO 8601 strings — it is only intended as the inverse operation of datetime.isoformat(). A more full-featured ISO 8601 parser, dateutil.parser.isoparse is available in the third-party package dateutil.
Поэтому можно воспользоваться методом strptime() из datetime -модуля
from datetime import datetime, timedelta def check_period(datetime_check:str) -> bool: to_datetime = datetime.strptime(datetime_check, "%Y-%m-%dT%H:%M:%S.%fZ") if (to_datetime + timedelta(weeks=2)) > datetime.now(): return True return False
dates = [ "2021-01-29T21:33:04.836603Z", # False "2022-01-29T21:33:04.836603Z", # True ] for date in dates: print(f", возвращено из функции ")
2021-01-29T21:33:04.836603Z, возвращено из функции False 2022-01-29T21:33:04.836603Z, возвращено из функции True
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Сравнение дат и времени в Python — с часовыми поясами и без них
Введение При работе с датами часто бывает необходимо знать, наступает ли данная дата до или после другой даты. Мы можем получить эти ответы, сравнив даты. В этой статье мы узнаем, как использовать модуль Python datetime для создания и сравнения как простых (без информации о часовом поясе), так и известных (с информацией о часовом поясе) дат. Для сравнения дат мы будем использовать операторы сравнения в Python: <,>, ==, <=,> =,! =. Примечание. В модуле datetime есть два метода создания объекта даты — d
Время чтения: 4 мин.
Вступление
Часто при работе с датами вам нужно знать, наступает ли данная дата до или после другой даты. Мы можем получить эти ответы, сравнив даты.
В этой статье мы узнаем, как использовать datetime для создания и сравнения как простых (без информации о часовом поясе), так и известных (с информацией о часовом поясе) дат.
Для сравнения дат мы будем использовать операторы сравнения в Python: , ==, =, != .
Примечание. В datetime есть два метода создания объекта даты — datetime.datetime и datetime.date . Сравнение может производиться только с объектами, созданными из одного и того же класса:
datetime.datetime.now() >= datetime.date.today()
Это приведет к TypeError :
TypeError: can't compare datetime.datetime to datetime.date
Сравнение наивных дат и времени по часовому поясу
Начнем со сравнения наивных дат , которые не имеют информации о часовом поясе. Во-первых, мы хотим импортировать модуль datetime
from datetime import datetime, date
Затем давайте сделаем несколько дат, которые мы сможем сравнить:
date1 = date(1995, 3, 20) date2 = date(2020, 1, 1) dob_a = datetime(1995, 3, 20) dob_b = datetime(2020, 1, 1)
Сравнить эти объекты так же просто, как сравнить, скажем, целые числа. Дата меньше другой, если ее время предшествует другому.
print("date1 comes before date2?", date1 < date2) print("date1 comes after date2?", date1 >date2) print("date1 is equal to date2?", date1 == date2)
date1 comes before date2? True date1 comes after date2? False date1 is equal to date2? False
Теперь вы обычно включаете эту логику в некоторые операторы управления потоком:
if dob_a > dob_b: print("person a is older than person b") else: print("person b is older than person a")
person b is older than person a
Сравнение дат и времени с учетом часового пояса
Часовые пояса могут немного усложнить ситуацию, хотя, к счастью, мы можем применить ту же логику к сравнению. Единственная разница в том, что мы работаем с известными датами — датами с дополнительной информацией о часовом поясе, в котором они находятся:
from datetime import datetime import pytz # Create timezone objects for different parts of the world tz_ny= pytz.timezone('America/New_York') tz_lon = pytz.timezone("Europe/London") # Year, Month, Day, Hour, Minute, Second datetime = datetime(2010, 4, 20, 23, 30, 0) # Localize the given date, according to the timezone objects date_with_timezone_1 = tz_ny.localize(datetime) date_with_timezone_2 = tz_lon.localize(datetime) # These are now, effectively no longer the same *date* after being localized print(date_with_timezone_1) # 2010-04-20 23:30:00-04:00 print(date_with_timezone_2) # 2010-04-20 23:30:00+01:00 print(date_with_timezone_1 == date_with_timezone_2)
Выполнение этого кода приводит к:
False
Пока это заявление:
print(date_with_timezone_1 > date_with_timezone_2)
True
Этот результат может показаться вам немного странным . Мы сравниваем эти две даты:
2010-04-20 23:30:00-04:00 # date_with_timezone_1 2010-04-20 23:30:00+01:00 # date_with_timezone_2
Интуитивно кажется, что date_with_timezone_2 действительно больше date_with_timezone_1 . Но давайте посмотрим, как работает функция localize()
Здесь мы использовали pytz чтобы сделать наши наивные даты осведомленными. tz_ny объект часового пояса для Нью-Йорка (tz_ny) и объект часового пояса для Лондона ( tz_lon ).
Затем, чтобы ввести информацию о часовом поясе в наш datetime , мы запустили localize() и упаковали результат в date_with_timezone_1 и date_with_timezone_2 .
Мы поместили 23:30 в localize() , которая, в свою очередь, создала дату и время для 23:30 в Нью-Йорке и 23:30 в Лондоне соответственно. Чтобы добраться с 23:30 в Нью-Йорке до 23:30 в Лондоне, нужно добавить 4 часа. Прошло больше времени, чтобы добраться до Нью-Йорка до 23:30, чем до Лондона до 23:30. Таким образом, datetime, соответствующее Нью-Йорку в 23:30, больше, чем datetime, соответствующее Лондону в 23:30.
Помните об этом поведении при такой работе с часовыми поясами.
Однако стоит отметить, что сравнение известных дат с наивными датами приведет к ошибке:
date_with_timezone = tz_ny.localize(datetime) print(datetime == date_without_timezone)
Это приведет к следующей ошибке:
TypeError: can't compare offset-naive and offset-aware datetimes
Итак, чтобы сравнивать объекты datetime, оба объекта должны быть либо наивными, либо осведомленными.
Заключение
В этой статье мы обсудили способы сравнения дат с привязкой к часовому поясу и без учета часовых поясов в Python, мы также рассмотрели возможные подводные камни, с которыми мы можем столкнуться при сравнении дат, и возможные обходные пути.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте их в разделе комментариев ниже.
Licensed under CC BY-NC-SA 4.0
Сравнение текущего времени со временем в переменной
Мне необходимо сравнить текущее время с записанным заранее в переменной .
Т.е допустим сейчас 12:00 ,а в переменой 13:45 ,на выходе хочу получить : до события осталось 1 час 45 минут .
Подскажите пожалуйста ,как это можно реализовать ?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Работа с датой и временем. Создание текущего времени
Известно, как получить текущую дату: from datetime import date today = date.today().
Сравнения текущего времени с временем заданными в условий
Здравствуйте, прощу помочь с созданием программы для школьного звонка. Как осуществить сравнение.
Сравнение текущего времени с нужным
Добрый день! Изучаю Java совсем недавно и столкнулся с тем, что мне нужно получить текущее время.
Сравнение текущего времени и установленного в textbox-е
Привет всем! Я новичок в программировании, поэтому немного туповатый вопрос. Не могу додуматься.
Сравнение текущего времени с частью даты в таблице
одна из полей таблицы имеет дату в форме типа "10:11:45" мне надо получать из таблицы записи в.
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Сравнение дат
#1 Март 15, 2012 05:31:45
swind2012 От: Зарегистрирован: 2012-03-15 Сообщения: 5 Репутация: 0 Профиль Отправить e-mail
Сравнение дат
Здравствуйте,
мне нужно сравнить 2 даты:
1 дата — это текущее время
2 дата — это дата создания файла в каталоге
прошу подсказать как их свести к единому формату, спасибо.
#2 Март 15, 2012 07:04:34
pyuser От: Зарегистрирован: 2007-05-13 Сообщения: 658 Репутация: 36 Профиль Отправить e-mail
Сравнение дат
swind2012
прошу подсказать как их свести к единому формату
Почитать справку по модулю datetime 😉 (функция fromtimestamp)
#3 Март 16, 2012 06:03:23
Семён От: Зарегистрирован: 2011-12-27 Сообщения: 31 Репутация: 0 Профиль Отправить e-mail
Сравнение дат
Я только начал изучать python,но посмею слегка выразить своё мнение:
1)для начала бы, я считаю, нужно указать ПС на какой ОС будет работать скрипт,если на ОС семейства Windows или ещё какой-это одно дело,если же на ОС семейства Linux-другое дело
Отсюда и выводы-лично я могу подсказать как я на Линуксе сравнивал даты
Сранвивал я по unix-time времени+время посл изменения
Т.е. для конкретного случая я бы сделал так:
1)привёл бы в формат unix-time текущее время
2)вытащил бы информацию о создании файла(здесь также нужно уточнить-о создании или последнем изменении) в формате unix-time
3)сравнить эти два показателя
могу конечно ошибиться,но я бы это реализовал сл образом:
#импортируем необходимый модуль
import time
import time as _time
from datatime import datatime
#в unix-time формате текущее время
now=time.localtime(time.time())
filetime=os.stat(fil)
if now print 'Yes'
else:
print 'No'
но тут есть нюанс один…т.к. это unix-время,то файл созданный долпустим прямо сейчас и время запрашиваемое чуть позже на определённом времени сегодня же-это будут разное время..поэтому здесь нужно лезть в структуру вывода даты и переопределить часы,минуты,секунды….а уже потом преобразовывать в соотв форма…и уж после сравнивать.
Ещё раз повторюсь,я лишь начинающий могу конечно ошибиться, но подобное у себя татким вот образом реализовал-всё работает
