Как конвертировать целое число в дату объекта Python? - PullRequest
19 голосов
/ 17 марта 2012

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

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

Ответы [ 3 ]

25 голосов
/ 25 июня 2012

На этот вопрос уже дан ответ, но в интересах других, кто интересуется этим вопросом, я хотел бы добавить следующее предложение: вместо того, чтобы выполнять нарезку самостоятельно, как предложено выше, вы также можете использовать strptime() который (ИМХО) легче читать и, возможно, предпочтительный способ сделать это преобразование.

import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
19 голосов
/ 17 марта 2012

Я бы предложил следующий простой подход для конвертации:

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)

Это гарантирует, что длина вашей строки составляет восемь символов, а слева -дополнены нулями, даже если год меньше 1000 (хотя отрицательные годы могут стать смешными).

Дополнительная справка: объекты datetime , объекты timedelta

6 голосов
/ 07 июня 2016

Вот что, я полагаю, отвечает на вопрос (Python 3, с подсказками типов):

from datetime import date


def int2date(argdate: int) -> date:
    """
    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(int2date(20160618))

Приведенный выше код дает ожидаемое 2016-06-18.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...