Подтвердить что ты не робот

Как преобразовать целое число в объект даты python?

Я создаю модуль в python, в котором я получаю дату в целочисленном формате, например 20120213, что означает 13 февраля 2012 года. Теперь я хочу преобразовать эту дату в формате integer в объект даты python.

Кроме того, если есть какие-либо средства, с помощью которых я могу вычитать/добавить количество дней в такой целочисленной форматированной дате, чтобы получить значение даты в том же формате? например, вычитание 30 дней из 20120213 и получение ответа как 20120114?

4b9b3361

Ответ 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.