Как преобразовать целое число в объект даты python?
Я создаю модуль в python, в котором я получаю дату в целочисленном формате, например 20120213
, что означает 13 февраля 2012 года. Теперь я хочу преобразовать эту дату в формате integer в объект даты python.
Кроме того, если есть какие-либо средства, с помощью которых я могу вычитать/добавить количество дней в такой целочисленной форматированной дате, чтобы получить значение даты в том же формате? например, вычитание 30 дней из 20120213
и получение ответа как 20120114
?
Ответы
Ответ 1
Я бы предложил следующий простой подход для преобразования:
from datetime import datetime, timedelta
s = "20120213"
# you could also import date instead of datetime and use that.
date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8]))
Чтобы добавить/вычесть суровое количество дней (в секундах тоже работает), вы можете сделать следующее:
date += timedelta(days=10)
date -= timedelta(days=5)
И конвертируйте обратно, используя:
s = date.strftime("%Y%m%d")
Чтобы преобразовать целое число в строку безопасно, используйте:
s = "{0:-08d}".format(i)
Это гарантирует, что ваша строка состоит из восьми charecters long и left-padded с нулями, даже если год меньше 1000 (отрицательные годы могут стать забавными).
Дополнительная ссылка: объекты datetime, объекты timedelta
Ответ 2
Этот вопрос уже ответил, но для других, рассматривающих этот вопрос, я хотел бы добавить следующее предложение: вместо того, чтобы делать разрез самостоятельно, как было предложено выше, вы также можете использовать strptime(), который является (IMHO) легче читать и, возможно, предпочтительный способ сделать это преобразование.
import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
Ответ 3
Вот что я считаю ответом на вопрос (Python 3, с подсказками типов):
from datetime import date
def int2date(argdate: int):
"""
If you have date as an integer, use this method to obtain a datetime.date object.
Parameters
----------
argdate : int
Date as a regular integer value (example: 20160618)
Returns
-------
dateandtime.date
A date object which corresponds to the given value `argdate`.
"""
year = int(argdate / 10000)
month = int((argdate % 10000) / 100)
day = int(argdate % 100)
return date(year, month, day)
print(intdate2date(20160618))
Приведенный выше код дает ожидаемый 2016-06-18
.