字符串
date2check = to_datetime(str(last_tx.year) + \
'-' + str(int(last_tx.month)-3) + \
'-' + str(last_tx.day) + \
' ' + str(last_tx.hour) + \
':' + str(last_tx.minute) + \
':' + str(last_tx.second))
没有问题,但我想知道是否有某种方法可以更合适地重新编写(以pythonic方式)。 last_tx
是一个日期时间对象。
答案 0 :(得分:3)
pythonic方法是使用datetime
模块来获取3个月之前的日期:
datetime.strftime(last_tx-timedelta(90),'%Y-%m-%d %H:%M:%S')
以下是一个例子:
>>> from datetime import datetime, timedelta
>>> datetime.now()
datetime.datetime(2016, 5, 23, 23, 3, 34, 588744)
>>> datetime.strftime(datetime.now()-timedelta(90),'%Y-%m-%d %H:%M:%S')
'2016-03-24 23:03:38'
正如评论中提到的@ sparkandshine,因为90并不总是代表3个月,所以您可以使用dateutil.relativedelta
来实现完全匹配。
答案 1 :(得分:2)
更加pythonic的方式是使用 dateutil.relativedelta
(声明3个月)和 datetime.strftime
(格式化日期时间)。这是一个MWE。
from datetime import datetime
from dateutil.relativedelta import relativedelta
three_months = relativedelta(months=3)
dt = datetime.now() - three_months # replace `datetime.now()` with `last_tx`
s = dt.strftime('%Y-%m-%d %H:%M:%S')
print(s)
# Output
2016-02-23 20:37:19
上一个回答,使用str.join
,
s1 = '-'.join([str(i) for i in [last_tx.year, last_tx.month-3, last_tx.day])
s2 = ':'.join([str(i) for i in [last_tx.hour, last_tx.minute, last_tx.second])
date2check = to_datetime(' ',join([s1, s2]))