2013-05-29 57 views
1

我有一個日期(我想它是在UTC,但也可能是在本地時間) 我想將此日期轉換爲秒...和返回(秒 - >日期)將時間轉換爲秒和返回

因此,在一些#1之後的研究,我想出了這兩個功能:

def UTC_to_sec(utc_time): 
    """ 
    convert time in UTC to seconds. 
    input: s string 
    output: float 
    """ 
    return time.mktime(datetime.datetime.strptime(utc_time, "%Y-%m-%d %H:%M:%S").timetuple()) 

def sec_to_UTC(s): 
    """ 
    convert time in to seconds to UTC. 
    input: time in seconds (float) 
    output: string 

    """ 
    return datetime.datetime.utcfromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S') 

# test with mydate="2010-09-15 08:31:00" 
print "time ", mydate, " (UTC) --> (",UTC_to_sec(maydate), ") [s] --> ",sec_to_UTC(UTC_to_sec(mydate)), " (UTC)" 

結果是:

時間:2010-09-15 :31:00(UTC) - >(1284532260.0)[s] - > 2010-09-15 :31:00(UTC)

這是否意味着mydate在本地時間,而不是UTC?

修改函數sec_to_UTC()時按以下我只得到正確的結果:

datetime.datetime.utcfromtimestamp(s-time.altzone).strftime('%Y-%m-%d %H:%M:%S') 

time.altzone在我的情況-7200 [s]之內。但這是一個令人討厭的解決方法。

我的問題是:什麼使上述日期 - 秒 - 日期轉換取決於時區?

回答

1

罪魁禍首是time.mktime()

the documentation

這是本地時間的逆函數()。它的參數是struct_time或完整的9元組(因爲需要dst標誌;如果它是未知的,則使用-1作爲dst標誌),它表示本地時間的時間,而不是UTC。

+0

哦非常真實!這意味着我需要通過添加time.altzone的值來糾正mktime的返回值,對吧? – Tengis