Неправильный перевод времени

У меня есть определенное количество секунд, а точнее 625690. Код

time = datetime.datetime.fromtimestamp(625690)

print(time.strftime('%#d дней'))

Переводит это время, как 8 дней, хотя 625693 секунд - это 7 дней. Почему такая ошибка?


Ответы (2 шт):

Автор решения: MaxU

функция datetime.datetime.fromtimestamp() - предназначена для преобразования POSIX timestamp (число секунд, прошедших с 1970-01-01 00:00:00 UMT) в объект типа datetime.datetime.

Число 625690 соответствует 7.24 дням

In [120]: 625690 / 24 / 60 / 60
Out[120]: 7.241782407407408

Таким образом при преобразовании этого числа в дни мы уже "перевалили" за 7 полных дней и поэтому этот POSIX timestamp соответствует числу:

In [121]: time.strftime("%Y-%m-%d %H:%M:%S")
Out[121]: '1970-01-08 06:48:10'

если вас интересует сколько полных дней содержится в данном количестве секунд - используйте целочисленное деление:

In [123]: 625690 // (24 * 60 * 60)
Out[123]: 7
→ Ссылка
Автор решения: CrazyElf
%d Day of the month as a decimal number [01,31].

То есть формат %d - это просто день из получившейся даты. Посмотрим что же за дата и почему:

import datetime

time1 = datetime.datetime.fromtimestamp(0)
time2 = datetime.datetime.fromtimestamp(625690)

print(time1)
print(time2)

Вывод:

1970-01-01 00:00:00 
1970-01-08 05:48:10 70

Всё просто. Моменту 0 соответствует дата 1970-01-01, поэтому через 7 с лишним дней будет дата 1970-01-08, поэтому %d и выводит эту дату 8.

Я так понимаю, вам нужна не абсолютная дата, соответствующая вашему числу секунд, а соответствующий этому числу секунд промежуток в днях. Получить его очень легко:

print(datetime.timedelta(seconds=625690).days)

Вывод:

7
→ Ссылка