我一直在努力將給定的時間轉換爲不同的格式,考慮到外部設備的時區,跳過操作系統的時區轉換。Python strptime - 處理單個數字日期
最初,我有UTC時間的時間和設備的時區。例如,我現在的時間是秒= 1343931446,時區= -0700。我想要做的是將其轉換爲格式YYYYMMDD_HHMMSS
,該格式已經正常工作了一段時間。對於上述值,它應該是20120802_111726
。
以下代碼塊自從我在7月11日編寫它以來一直有效。問題歸結爲這樣一個事實,即當天只有1位數字(從昨天開始),解析出錯,我得到20120821_011726
。我推測問題在於當我將時間值轉換爲日期時間,因爲當我打印time_t
時,我會得到time.struct_time(tm_year=2012, tm_mon=8, tm_mday=2, tm_hour=18, tm_min=17, tm_sec=26, tm_wday=3, tm_yday=215, tm_isdst=0)
,在解析爲datetime
時,將其視爲單個字符字符串。
問題是,我可以強制datetime接受每月/每小時的雙字符輸入,因此它可以正確解析,還是有更好的方法來轉換這些格式?請記住,這種當前的方法是由於無法使用考慮當前系統時間的任何方法而編寫的,因爲這是在時區不能保證與系統上的時區相同的情況下進行的,從...獲取。
def convert_time(seconds, tz):
""" Times obtained were in seconds since epoch.
Convert to format YYYYMMDD_HHMMSS.
"""
time_t = time.gmtime(seconds) # convert to time tuple
# convert to datetime format - because time zone comparisons can't be made
# in a format directly convertible from UTC
time_dt = datetime.datetime.strptime(str(time_t.tm_year) +
str(time_t.tm_mon) +
str(time_t.tm_mday) +
str(time_t.tm_hour) +
str(time_t.tm_min) +
str(time_t.tm_sec),
'%Y%m%d%H%M%S')
# Convert time zone to timedelta
offset = datetime.timedelta(hours=int(tz.lstrip('-')[:2]),
minutes=int(tz.lstrip('-')[2:]))
sign = -1 if tz.startswith('-') else 1
time_dt = time_dt + sign * offset
time_dt = time_dt.strftime('%Y%m%d_%H%M%S')
return time_dt
爲什麼不使用'datetime.datetime(* time_t的[6],tzinfo =無)'? – 2012-08-02 18:32:45
另外,您可以使用時區對象(請參閱[documentation](http://docs.python.org/library/datetime.html#tzinfo-objects))來處理偏移量; timedelta對象不是要走的路。 – 2012-08-02 18:34:47
這種轉換方法非常完美。我知道我的方法非常迂迴,錯誤使得情況更糟。隨意發佈,作爲答案。 – russ36363 2012-08-02 18:37:13