2017-08-30 134 views
4

我以字符串格式接收2種不同格式的日期時間。但在存儲在PostgreSql數據庫中時,它必須以UTC格式存儲。在Python中將字符串轉換爲DateTime到UTC格式,postgresql

Format 1 : 2017-08-25 01:10:56.910523 -04:00 
Format 2 : 2017-08-25 01:10:56.910523 AMERICA/NEW_YORK 

在PostgreSQL使用timestamptz嘗試,但我想這似乎並不明白AMERICA /紐約怎麼能轉換並存儲在UTC格式DB

-4:00和AMERICA/NEW_YORK只是個例子,但它可以是其他任何東西。

+1

你試過'dateutil.parser'嗎? 這裏是一個鏈接: http://dateutil.readthedocs.io/en/stable/parser.html 它應該不是很難解析時區信息並重新格式化它。 編輯:它實際上'從dateutil.tz進口gettz' –

+0

爲gettz我需要知道時區的權利,所以我應該解析字符串,並從它得到時區 – Sharath

回答

2

我會做這樣的事情: 首先嚐試完全解析它,如果這不能單獨解析它。

from dateutil import parser, tz 
utc_tz = tz.gettz('UTC') 

times = ['2017-08-25 01:10:56.910523 -04:00', 
     '2017-08-25 01:10:56.910523 AMERICA/NEW_YORK'] 

for t in times: 
    try: 
     utc_time = parser.parse(t).astimezone(utc_tz) 
    except ValueError as e: 
     _date, _time, _tz = t.split(' ') 
     _time_wo_tz = parser.parse(' '.join([_date, _time])) 
     _parsed_tz = tz.gettz(_tz.title()) 
     _time_w_tz = _time_wo_tz.replace(tzinfo=_parsed_tz) 
     utc_time = _time_w_tz.astimezone(utc_tz) 

    print(utc_time) 
+0

'_parsed_tz = tz.gettz(_tz)'是給無** AMERICA /紐約**。因爲它沒有崩潰在catch塊 – Sharath

+0

@Sharath你在Windows機器上運行這個嗎? –

+0

我正在使用Ubuntu 16.04 – Sharath