我在python中创建一个模块,我在其中接收整数格式的日期,如20120213
,表示2012年2月13日。现在,我想将这个整数格式化的日期转换为python日期对象。
另外,如果有任何方法可以减去/添加这样的整数格式化日期的天数,以便以相同的格式接收日期值?比如从20120213
减去30天并收到20120114
的答案?
答案 0 :(得分:24)
这个问题已经回答了,但是为了其他人看到这个问题的好处,我想添加以下建议:您可以使用strptime()
而不是按照上面的建议进行切片。恕我直言)更容易阅读,也许是进行此转换的首选方式。
import datetime
s = "20120213"
s_datetime = datetime.datetime.strptime(s, '%Y%m%d')
答案 1 :(得分:17)
我建议采用以下简单的转换方法:
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(负面年份可能会变得有趣)。
答案 2 :(得分:6)
以下是我认为回答问题的方法(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
。
答案 3 :(得分:1)
import datetime
timestamp = datetime.datetime.fromtimestamp(1500000000)
print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))
这将给出输出:
2017-07-14 08:10:00