2014-01-06 34 views
0

追溯到:Convert a list of sample dates into GMT從字符串中提取時區

我有一些日期的樣本: 像:

Mon, 21 Nov 94 04:28:18 CST 
dec 21 94 17:05 BST 

我想這個轉換成GMT。對於第一個例子應該打印:

1994-11-21 10:28:18 

眼下正在打印:

1994-11-21 04:28:18 

我嘗試這樣做:

from dateutil import parser 
import pytz 
import datetime 

def to_utc(dt): 
    try: 
     return dt.astimezone(pytz.utc) 
    except ValueError: 
     return pytz.utc.localize(dt) 

DEFAULT_DATE = datetime.datetime(datetime.datetime.now().year, 1, 1) 

file = open("date_time.txt",'rb') 

for line in file: 
    date = line.rstrip('\n') 
    print date 

    dt = parser.parse(date, default=DEFAULT_DATE) 
    in_utc = to_utc(dt) 
    print in_utc 
+0

[將字符串轉換日期時間(HTTP的可能重複:// stackoverflow.com/questions/466345/converting-string-into-datetime) – Oz123

+0

但這沒有時區。這裏的輸出取決於時區。 – blackmamba

+0

如果時區總是在最後,你不能使用切片符號來獲得最後三個字符並使用它? – IanAuld

回答

0

書面(有正確的縮進在循環當然),你的腳本爲我使用python 2.6.6,pytz 2013.9和python-dateutil-1.5。輸出:

 
$ python dt.py 
Mon, 21 Nov 94 04:28:18 CST 
1994-11-21 10:28:18+00:00 
dec 21 94 17:05 BST 
1994-12-21 17:05:00+00:00 
+0

BST是UTC +1,因此不完全如預期。雖然我無法複製CST識別碼。 – alko

+0

啊,我的錯誤 - 我在CST,所以沒有轉換。 –

0

如果時區的一個固定量的認識,你可以到dateutil.parser提供有關它們的信息:

>>> tz = {'CST':-6*3600, 'BST':+1*3600} 
>>> for line in """Mon, 21 Nov 94 04:28:18 CST 
... dec 21 94 17:05 BST""".splitlines(): 
...  date = line.rstrip('\n') 
...  print date 
...  dt = parser.parse(date, default=DEFAULT_DATE, tzinfos=tz) 
...  in_utc = to_utc(dt) 
...  print in_utc 
... 
Mon, 21 Nov 94 04:28:18 CST 
1994-11-21 10:28:18+00:00 
dec 21 94 17:05 BST 
1994-12-21 16:05:00+00:00 
+0

完美的作品。但我有其他時區。即使它只是美國和歐洲的所有時區,它也會這樣做 – blackmamba