Как сравнить только день, месяц и год, используя временную метку?

#python #python-3.x #datetime #python-datetime #python-dateutil

#python #python-3.x #дата и время #python-datetime #python-dateutil

Вопрос:

Как мы можем сравнить 2 даты, если они имеют одинаковую дату независимо от метки времени?

Например:

 date1 = 1508651293229
date2 = 1508651293220

date1 = datetime.fromtimestamp(int(date1) / 1e3)
date2 = datetime.fromtimestamp(int(date2) / 1e3)

if(date1 == date2):
  print(True)
 

но это проверяет всю дневную метку, включая время, и я хочу проверить только день, месяц и год.

Я попытался найти некоторую документацию, но не смог найти ничего подходящего.

Ответ №1:

datetime.datetime экземпляры имеют date метод, который возвращает datetime.date объект, игнорируя время исходного значения.

 if date1.date() == date2.date():
 

Вы также можете создавать datetime.date экземпляры напрямую, если вас не волнует время, datetime.date.fromtimestamp которое также существует.

 date1 = datetime.date.fromtimestamp(date1 // 1000)
 

Комментарии:

1. Это работает, но проверяет дату, а также время, но мне нужна только часть дня, месяца и года

2. Затем вы неверно указали свое намерение в вопросе: «Я хочу проверить только день, месяц и год «.

3. Мой плохой, исправлен. Есть идеи, как избежать временной доли от этого

4. Это так. date Объект, возвращаемый date методом, не включает время. datetime.datetime.fromtimestamp(date1//1000).date() и datetime.date.fromtimestamp(date1//1000) оба возвращают datetime.date(2017, 10, 22)

5. Если вы действительно заботитесь только о дне, у каждого datetime.date экземпляра есть day атрибут, например, datetime.date.fromtimestamp(date1//1000).day == 22

Ответ №2:

Попробуйте:

 if date1.date() == date2.date():
    print('True')

# and indeed, they are:
True
 

Комментарии:

1. Это работает, но проверяет дату и время, но мне нужна только дневная часть

2. нет, он не проверяет время. .date() возвращает только часть даты (год, месяц, день) datetime .

Ответ №3:

datetime.date() возвращает объект date с тем же годом, месяцем и днем

В вашем случае вы должны использовать:

 if(date1.date() == date2.date()):
  print(True)
 

Вы также можете сократить это, просто выполнив

 print(date1.date() == date2.date())
 

Комментарии:

1. Это работает, но проверяет дату и время, но мне нужна только дневная часть.

2. Можете ли вы уточнить, что вы подразумеваете под «дневной частью?» date1.date() и date2.date() оба равны 2017-10-22 . Если вам нужен только день месяца (игнорируя месяц и год), вы можете использовать date1.day , который будет 22 .

3. Я рекомендую ознакомиться с документацией datetime . Это может решить вашу проблему.