漂亮的长字符串格式

时间:2016-05-23 18:24:46

标签: python python-2.7 datetime

字符串

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是一个日期时间对象。

2 个答案:

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