我必须在今天大约一个月之前在python中获取当天的日期。
结果字符串的格式应为yyyy/mm/dd
日期必须是近似的,所以可以避免考虑闰年和所有事情(或者如果容易也可以合并)
我为上述问题编写了以下代码
from datetime import date
tup=list(date.today().timetuple()[0:3])
if (tup[1]==1):
tup[1]=12
tup[0]-=1
else:
tup[1]-=1
if tup[1]==2:
tup[2]=min(28,tup[2])
else if tup[1] in [4,6,9,11]:
tup[2]=min(30,tup[2])
print '/'.join([str(x) for x in tup])
有没有更优雅的方法来解决上述问题?
答案 0 :(得分:3)
您可以将datetime
类与timedelta
函数结合使用。
即
>>> from datetime import date, timedelta
>>> days=30
>>> d = date.today() - timedelta(days=days)
>>> print d
2014-06-29
然后,格式化:
from datetime import datetime
dt = datetime.strftime(d, "%Y/%m/%d")
>>> print dt
2014/06/29
答案 1 :(得分:2)
使用名为Delorean
的第三方软件包的另一种解决方案:
>>> from delorean import Delorean
>>> d = Delorean()
>>> d.last_month().date.strftime('%Y/%m/%d')
'2014/06/29'
答案 2 :(得分:0)
您也可以使用DateUtil的relativedelta
功能来实现此功能。它处理一个月内的日子和适当的闰年,就像alecxe的图书馆一样。
如果您没有DateUtil库,请先安装
pip install python-dateutil
然后你可以这样使用它:
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> now = datetime.datetime.today()
>>> now + relativedelta(months=1)
datetime.datetime(2014, 8, 29, 0, 32, 51, 843000)
>>> now + relativedelta(months=-1)
datetime.datetime(2014, 6, 29, 0, 32, 51, 843000)
最后,要格式化它,您需要使用strftime
函数。
>>> (now + relativedelta(months=-1)).strftime('%Y/%m/%d')
'2014/06/29'
答案 3 :(得分:0)
datetime是这里正确的模块..
import datetime
datetime.datetime.now().strftime("%H:%M:%S.%f")
希望这有帮助。