Не понимая дельта даты и времени в Python - PullRequest
0 голосов
/ 08 января 2019

from datetime import datetime as dt

У меня есть 2 поля даты и времени

dt.now() возврат 2019-01-08 11: 46: 26.035303 Это PST

х - это мой набор данных

x['CreatedDate'] возврат 2019-01-08T20: 35: 47.000 + 0000

dt.strptime(x['CreatedDate'.split('.')[0],'%Y-%m-%dT%H:%M:%S)) - datetime.timedelta(hours=8) возврат 2019-01-08 08: 43: 33

Я вычитаю два, tdelta = dt.now() - (dt.strptime(x['CreatedDate'.split('.')[0],'%Y-%m-%dT%H:%M:%S)) - datetime.timedelta(hours=8)) 2019-01-08 11: 46: 26.035303 - 2019-01-08 08: 43: 33

Разница должна быть ~ 3 часа, но я получаю результат -1 day, 11:02:53.039790 -13H 12M 53S

Я не совсем понимаю, что возвращается.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Проблема связана с вычитанием datetime.timedelta (hours = 8). Я удалил его, изменив dt.now на dt.utcnow (), и он работает нормально.

0 голосов
/ 08 января 2019

Отказ

Мне трудно создавать datetime объекты, которые вы сделали. Поэтому мой ответ не будет прямым решением вашей конкретной проблемы.

В моем коде не определено x. Если вы предоставите его, я могу изменить свой ответ, чтобы он был более конкретным.

Ответ

Но если вы используете этот код:

import datetime as dt

first_time = dt.datetime(2019, 1, 8, 8, 43, 33) #This is a good way to make a datetime object

Чтобы сделать ваш объект даты и времени, этот код ниже сделает правильные вычисления и распечатает его для вас:

second_time = dt.datetime.now() 
my_delta = first_time - second_time
print("Minutes: " + str(my_delta.total_seconds()/60))
print("Hours: " + str(my_delta.total_seconds()/3600))
print("Days: " + str(my_delta.total_seconds()/3600/24))

Примечание

dt.datetime принимает (год, месяц, день, час, минута, секунда) здесь, но dt.datetime.now() также делает единицу с микросекундами (год, месяц, день, час, минута, секунда, микросекунды). Функция может обрабатывать данные с разными временными характеристиками без ошибок.

Примечание 2

Если вы сделаете print(my_delta) и получите что-то вроде: -1 day, 16:56:54.481901, это будет равняться вашей разнице, если ваша разница Hours: -7.051532805277778 Это потому, что 24-16.95 = -7.05

...