2017-11-23 33 views
0

내 현지 시간 (유럽/베를린)에있는 UTC 날짜 시간날짜 시간 모듈과 팬더가 to_datetime 다른 결과 줄은

utc_str = '2017-11-21T23:00+0100' 

포함 된 문자열을 가지고 utc_string에서 얻으려고합니다.

나는 utc_string 잘 사용 local_time에 변환 할 수 있습니다 : 나는 Pandas 사용할 때

import datetime as dt 
utc_time = dt.datetime.strptime(date_str, '%Y-%m-%dT%H:%M%z') 
local_time = utc_time.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Europe/Berlin')) 

print(local_time.strftime('%Y-%m-%d %H:%M')) 
>>> 2017-11-22 00:00 

그러나, 나는 다른 결과를 얻을. 나는 datetime 모듈과 동일한 과정을 수행하려고하면 순진, 결과가 떨어져 여전히

import pandas as pd 
pd_date = pd.to_datetime(date_str, utc=True) 

print(pd_date.strftime('%Y-%m-%d %H:%M')) 
>>> '2017-11-21 22:00' 

그리고 :

pd_date = pd.to_datetime(date_str, utc=True) 
pd_date = pd_date.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Europe/Berlin')) 

print(pd_date.strftime('%Y-%m-%d %H:%M')) 
>>> '2017-11-21 23:00' 

인가가이 오프셋 UTC를 적용하지 않는 것 내가 이해하지 못하는 것? pd.to_datetime 또는 다른 오류가 있습니까? 파이썬 3.6, 윈도우 주석에 명시된 바와 같이 7

+0

'2017-11-21T23 : 00 + 0100'은 (는) 시간대를 지정하지 않고 '+ 0100'(유럽/Berlin) 대신 UTC가 필요합니까?UTC의 '22 : 00'입니다 –

+0

올바르게 이해하면 문자열에 잘못 라벨이 지정되거나 utc 형식이 잘못 지정 되었습니까? 그 때 어떤 형태입니까? 그것은 내가 가지고있는 데이터이므로, 어떻게 처리해야하는지 알 필요가 있습니다. –

+0

'replace '를 사용하여 지역 시간을 계산하는 것은 잘못되었습니다. 'astimezone (...)'을 할 수 있습니다. –

답변

1

, 나는 local_time에 대한 코드가 너무

utc_time 
datetime.datetime(2017, 11, 21, 23, 0, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)) 
utc_time.replace(tzinfo=pytz.utc) 
'datetime.datetime(2017, 11, 21, 23, 0, tzinfo=<UTC>)' 

잘못된 생각 이,667,663,210은 datetime에서 '+0100을 제거하지만

"datetime.datetime(2017, 11, 22, 0, 0, tzinfo=<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>)" 

이 1 시간 23 추가

utc_time.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Europe/Berlin')) 
같은 나머지 유지 : 00UTC를, 그래서

을 예상대로 베를린에서 다음날 자정이 될
pd.to_datetime(utc_str, utc=True) 
Timestamp('2017-11-21 22:00:00+0000', tz='UTC') 
,536,913,632 10

동작의 차이는 생성자 때문입니다. pd.to_datetime 22로 다시 시간과 시간대를 계산 : 00UTC 대신 23 : + 0100 00, 당신은 UTC로 시간대 정보 교환이 그래서 만약, 그것은 아무것도에게

귀하의 utc_time 개체가 올바른에

현지 시간으로 변경되지 않습니다 시간대이므로 현지 시간을 원하면 utc_time.strftime('%Y-%m-%d %H:%M')을 팬디에서 수행해야합니다. pd.to_datetime(utc_str, utc=True).astimezone(pytz.timezone('Europe/Berlin')).strftime('%Y-%m-%d %H:%M')

+0

이 표시됩니다. 'utc_time'은 실제 UTC'2017-11-21 23 : 00'과 로컬 오프셋'+ 0100'의 두 가지 형태로 보이는 것 같습니다. 함께 추가하면 원하는 현지 시간을 얻을 수 있습니다. 2017-11 -200 00 : 00'. 'utc_time'이 비 감각적 인 형식 인 것처럼 보이기 때문에이 문자열은 오프셋을 제거한 다음 timedelta로 추가해야합니다. –

+0

'utc_time' 대신에'utc_str'을 의미합니다. –

+0

'utc_string'은 UTC 시간 문자열이지만 현지 시간 표현입니다. –