2016-03-04 27 views
1

使用Python 2.7,如何將給定時間從一個偏移量轉換爲另一個偏移量?我的解決方案將時間偏移視爲時間並忽略導致不正確轉換的符號(+/-)。Python 2.7 - 時間偏移轉換

import time 
from datetime import datetime 
import re 

# inputs (cannot change) 
from_time_str = '13:45' 
from_offset = '-0700' 
to_offset = '-0100' 

# conversion 
from_time = time.strptime(from_time_str, '%H:%M') 

from_offset_time = time.strptime(from_offset, '-%H%M') 
to_offset_time = time.strptime(to_offset, '-%H%M') 

offset_diff = abs(time.mktime(to_offset_time) - time.mktime(from_offset_time)) 

to_timestamp = offset_diff + time.mktime(from_time) 
to_datetime = datetime.fromtimestamp(to_timestamp) 

print to_datetime.strftime('%H:%M') 

輸出:

19:45 

+/-:

from_time_str = '13:45' 
from_offset = '-0700' 
to_offset = '+0700' 

to_offset_time = time.strptime(to_offset, '+%H%M') 

輸出:

13:45 
+0

對此,如何使用time [datetime.timedetla()](https://docs.python.org/2/library/datetime.html#timedelta-objects)?你可以從你的日期時間對象減去所需的小時數,如下所示:''datetimeObj - datetime.timedelta(hours = 7)''或''datetimeObj - datetime.timedelta(hours = 3)'' – Igor

+1

@Igor我有很難計算兩個偏移量之間的差異,即:+0700和-0700之間的差值是14,那麼我可以使用14作爲timedelta中的小時數。或者在-0100和+0530之間是6小時30分鐘。 – rvk

+0

如果這些操作的目的是[將一個時區中的時間轉換爲另一個時區中的時間(您應該將時間轉換爲datetime對象並提供相應的pytz' tzinfo對象),那麼您正在做錯某事。]( http://stackoverflow.com/q/10997577/4279) – jfs

回答

1

如果你打開使用dateutil庫,這似乎工作:

from dateutil.parser import parse 
from dateutil.relativedelta import relativedelta 

# inputs (cannot change) 
from_time_str = '13:45' 
from_offset = '-0700' 
to_offset = '-0100' 


if from_offset[0]=='-': 
    non_offset = parse(from_time_str)+relativedelta(hours=int(from_offset[1:3]), minutes=int(from_offset[3:])) 
else: 
    non_offset = parse(from_time_str)-relativedelta(hours=int(from_offset[1:3]), minutes=int(from_offset[3:])) 

if to_offset[0]=='-': 
    to_offset_time = non_offset-relativedelta(hours=int(to_offset[1:3]), minutes=int(to_offset[3:])) 
else: 
    to_offset_time = non_offset+relativedelta(hours=int(to_offset[1:3]), minutes=int(to_offset[3:])) 

print to_offset_time.strftime('%H:%M') 

我是當然有一種更pythonic的方式,但它似乎工作!

+1

這很好,謝謝。 – rvk

+0

你很受歡迎。 – Kapocsi