在python中以特定格式获取日期

时间:2014-07-29 04:48:47

标签: python date

我必须在今天大约一个月之前在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])

有没有更优雅的方法来解决上述问题?

4 个答案:

答案 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")

希望这有帮助。