2016-05-23 6 views
2

文字列の問題もなくプリティ・フォーマット

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)) 

作品が、私はもっとappropiately再書き込みこの(神託のように)にはいくつかの方法があるかどうかを知りたいです。 last_txはdatetimeオブジェクトです。

+1

[こちらは類似記事です](http://stackoverflow.com/questions/4172448/is-it-possible-to-break-a-long-line-to-multiple-lines-in-python#4172465)それは助けるべきである。本質的にバックスラッシュで改行をエスケープすることができます。 –

答えて

2

よりPython的な方法は、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])) 
+0

私はわずか2ヶ月しか違いがありません。 '2016-05-23 14:27:27 2016-03-23 14:27:27 2016-05-22 21:20:08 2016-03-22 21:20 :08 2016-05-23 13:40:20 2016-03-23 13:40:20'あなたはその理由を知っていますか? –

+0

@ JuanDavidの場合、 'month'(絶対情報)を' months'(相対情報)に置き換えます。 – SparkAndShine

3

神託の方法は、3蛾前の日付を取得するためにdatetimeモジュールを使用している:ここでは

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

90日( 'timedelta(90)')は必ずしも3ヶ月に​​等しいとは限りません。 'relativedelta(月= 3)'を使う方が良いですか? – SparkAndShine

+1

@ sparkandshine確かに、ありがとう、;) – Kasramvd

+1

あなたの答えに私に言及してくれてありがとう。あなたは私のupvoteを得ました:-) – SparkAndShine