33

我在 python 中创建了一个模块,我在其中接收整数格式的日期,如20120213,表示 2012 年 2 月 13 日。现在,我想将此整数格式的日期转换为 python 日期对象。

另外,如果有什么方法可以在这种整数格式的日期中减去/添加天数以接收相同格式的日期值?就像减去 30 天20120213并收到答案一样20120114

4

4 回答 4

39

我建议以下简单的转换方法:

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)

这可以确保您的字符串长度为 8 个字符并用零填充,即使年份小于 1000 也是如此(负年份可能会变得有趣)。

进一步参考:datetime objects , timedelta objects

于 2012-03-17T13:30:46.383 回答
37

这个问题已经回答了,但为了其他人的利益,我想添加以下建议:而不是像上面建议的那样自己切片,你也可以使用strptime()which is (IMHO) 更易于阅读,也许进行此转换的首选方式。

import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
于 2012-06-24T21:42:00.150 回答
10

这是我认为回答问题的内容(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.

于 2016-06-07T08:39:31.423 回答
3
import datetime

timestamp = datetime.datetime.fromtimestamp(1500000000)

print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))

这将给出输出:

2017-07-14 08:10:00
于 2021-02-03T02:07:12.957 回答