2017-11-10 8 views
1

私はdatetimeに変換する日付の文字列を持っており、この日付(utc)とutcの現在時刻の時間差を表示したい。すなわち、 1日後と5時間後の場合は「01:05:00」と印刷します。 6分先であれば、 "00:00:06"と印刷してください。日付が過去の場合は、 " - 00:00:06"のように " - "を付加します。Pythonの日付と時刻の差が00:00:00となるように出力する

これまでのところ、2日前の場合は「0:0:27」、27分後には「-2:-5:-46」のようなものが表示されます。私は毎回、xx:xx:xxの一貫した書式設定をしたいと思います。私は多くの質問を見てきましたが、もし私がrelativedeltaを使う必要があるのか​​、datetime.timedeltaだけ使う必要があるのか​​は分かりません。助言がありますか?

for ticket in json.loads(data): 
    ticket_rdate = ticket["time_string"] 
    if ticket_rdate: 
     ticket_rdate = datetime.datetime.strptime(ticket_rdate, "%Y-%m-%d %H:%M:%S") 
     difference = relativedelta(datetime.datetime.utcnow(), ticket_rdate) 
     ticket["time_until"] = str(difference.days * -1) + ":" + str(difference.hours * -1) + ":" + str(difference.minutes * -1) + "" 
    sorted_tickets.append(ticket) 
return sorted_tickets 

あなたはちょうどあなたが一貫した形式で出力が得られます

difference = (datetime.datetime.utcnow() - ticket_rdate) 
str(difference) 

を行う場合、これは、Pythonで3

+1

私は、「1日5時間」ではなく「1時間5分」と言う意味で「01:05:00」と読みません。また、いくつかの(NASA?)は将来の時間( "カウントダウンTマイナス10秒...")のために " - "を使用することに注意してください。 –

答えて

0

です。その後、あなたが言及した形式でそれを取得するために、いくつかの文字列フォーマットを行うことができます。

+0

OPは 'DD:HH:MM'の形式で出力します。ソリューションがこの形式と一致しません。これは、1分41秒差のために得られるものです: '0:01:41.917627'。それは '00:00:01'でなければなりません。 – bfontaine

0

ゼロ埋め込みを指定できる文字列のフォーマットメソッドを使用します。同様に:あなたはより多くの柔軟性をしたい場合

now = datetime.datetime.utcnow() 
diff = utcnow - ticket_rdate 

negative = '-' if ticket_rdate < utcnow else '' 
hours = int(diff.total_seconds()/3600) 
mins = int(diff.total_seconds()/60) 
ticket['time_until'] = '{}{}:{:02}:{:02}'.format(negative, diff.days, hours, mins) 

またで、timedelta上relativedeltaを使用するための理由があります。 relativedeltaを使用すると、月単位や年単位のような他の単位で作業できるようになり、負のデルタのサポートが強化されます。あなたは日に精度を制限している考慮

https://docs.python.org/2/library/datetime.html#timedelta-objects

http://labix.org/python-dateutil#head-ba5ffd4df8111d1b83fc194b97ebecf837add454

+0

私はまだいくつかの結果として ":00:-2"を取得します。 – Peter

+0

ええ、ごめんなさい。私はそれがちょうどtimedeltaを使用して正しいと思う。部分的な分を表示する場合は、minの周りのint関数を削除します。 – RyanW

0

、私はあなたが本当にrelativedeltaを使用する必要はありませんでしょうね。あなたが数週間または数ヶ月を望むなら、確かにそうですが、あなたはしません。

delta = time1 - time2 
delta = delta // timedelta(minutes=1) 
print(str(delta)) 

そして、提供される機能は、重い物を持ち上げることをやってみましょう:

だからあなただけのような何かを行うことができPY3に念頭に置いてそれを維持します。

+0

これは何を返しますか?単一の整数? – Peter

+0

//?結果から秒/ミリ秒を捨てるだけです。 – jkm

関連する問題