[英]Format timedelta as time zone offset string
作為輸入,我有兩個時間戳字符串,一個是本地時間,另一個是UTC時間中的同一時刻。 我想以特定格式(例如+1100或-0500)將它們之間的差異(基本上是獲取本地時區偏移)作為字符串。
import datetime
local = '2018-01-31 18:34:42.172'
utc = '2018-01-31 23:34:42.172'
local_dt = datetime.datetime.strptime(local, '%Y-%m-%d %H:%M:%S.%f')
utc_dt = datetime.datetime.strptime(utc, '%Y-%m-%d %H:%M:%S.%f')
offset_timedelta = local_dt - utc_dt
offset = offset_timedelta.total_seconds() / 3600
offset
Out[8]: -5.0
使用timedelta,我可以將偏移量設置為float(例如上面的-5.0)。 從那里我可能會創建一個函數,以將浮點數轉換為所需格式的字符串,但是我很好奇是否缺少任何datetime / timedelta方法或格式,或者某些字符串格式可以用更干凈的代碼來完成工作,更高效。
任何幫助,將不勝感激。
編輯,因為我發現我的問題不清楚:是否有辦法通過日期時間庫或字符串格式來獲取我需要的“ -0500”(該特定格式的字符串,而不是浮點數)?
實際上,您已經完成了所有工作。 但是您可以使用dateutil
模塊隱藏雜亂的細節:
>>> local = '2018-01-31 18:34:42.172'
>>> utc = '2018-01-31 23:34:42.172'
>>> from dateutil import parser, relativedelta
>>> tzh=relativedelta.relativedelta(parser.parse(local), parser.parse(utc))
>>> tzh
relativedelta(hours=-5)
以所需的方式對其進行格式化:
>>> f"{tzh.hours:+03d}{abs(tzh.minutes):02d}"
'-0500'
或者,從2.6到3.5:
>>> "{hours:+03d}{minutes:02d}".format(hours=tzh.hours, minutes=abs(tzh.minutes))
'-0500'
dateutil
模塊dateutil
標准庫中,但值得下載。 它可以做的遠不止於此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.