簡體   English   中英

將timedelta格式化為時區偏移量字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM