Как изменить разрешение даты и времени? - PullRequest
3 голосов
/ 09 мая 2020

Есть ли простой способ заявить, что

a = '2020-01-01 19:30:33.996628' 
b = '2020-01-01 19:30:34' 

a и b равны. Если временное разрешение a изменить на секунду, то a может быть равно b. Как это реализовать с помощью кода?

Ответы [ 3 ]

2 голосов
/ 09 мая 2020

С округлением

  • Добавьте timedelta разницу между 1e6 и a.microsecond
from datetime import timedelta, datetime

a = datetime.fromisoformat('2020-01-01 19:30:33.996628')

a = a + timedelta(microseconds=(1e6 - a.microsecond))

print(a)

>>> datetime.datetime(2020, 1, 1, 19, 30, 34)

print(a.strftime('%Y-%m-%d %H:%M:%S'))

>>> 2020-01-01 19:30:34

С .replace(microsecond=0)

from datetime import datetime

a = datetime.fromisoformat('2020-01-01 19:30:33.996628')

print(a)

>>> datetime.datetime(2020, 1, 1, 19, 30, 33, 996628)

a = a.replace(microsecond=0)

print(a)

>>> datetime.datetime(2020, 1, 1, 19, 30, 33)

2 голосов
/ 09 мая 2020

если вы обрабатываете их оба как объекты datetime, вы можете использовать для них операторы arithmeti c. Например, вы можете вычесть их и проверить, удовлетворяет ли результат условию (например, разница менее одной минуты) по вашему усмотрению

0 голосов
/ 09 мая 2020

Более простой способ использования округления для сравнения: -

import datetime
from dateutil import parser

a = '2020-01-01 19:30:33.996628' 
b = '2020-01-01 19:30:34' 

a = parser.parse(a)
b = parser.parse(b)

a == b
False

format_str = '%Y-%m-%d %H:%M'

a_rounded = datetime.datetime.strptime(datetime.datetime.strftime(a, format_str), format_str)
b_rounded = datetime.datetime.strptime(datetime.datetime.strftime(b, format_str), format_str)

a_rounded == b_rounded
True

К этому вы можете добавить гибкости в соответствии с вашими потребностями, как я округлил для сравнения в Minutes. Итак, в вашем случае format_str будет таким: -

format_str = '%Y-%m-%d %H:%M:%S'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...