2016-03-04 73 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