2013-10-21 2 views
17

파이썬 datetime64 객체를 문자열로 변환하는 데 문제가 있습니다.numpy.datetime64를 python의 문자열 객체로 변환하십시오.

t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400') 

속으로 : 예를 들어

'2012.07.01' as a string. (note time difference) 

이미 문자열로 다음 datetime 길이에 datetime64 개체를 변환하는 것을 시도했다, 그러나 나는이 오류를 얻을 것 :

dt = t.astype(datetime.datetime) #1341100800000000000L 
time.ctime(dt) 
ValueError: unconvertible time 
+1

합니까 나를 위해 최고의 솔루션이었다 http://stackoverflow.com/questions/13703720/ converted-between-datetime-timestamp-and-datetime64는 특정 문제를 해결하는 데 도움이됩니까? –

+0

덕분 용액이었다 PD 등 수입 팬더 \t TS = pd.to_datetime (STR (일자)) \t ts.strftime D = ('. % Y. %의 m %의 D') –

답변

28

해결책은 :

0

판다를 사용하지 않은 경로가 있습니다. 아래주의 사항을보십시오.

>>> numpy.dtype(t) 
dtype('<M8[ns]') 

이이 값의 적분 값은 10^9 배 UNIX 타임 스탬프임을 의미

음은 t 변수 파이썬 검사하여 표시 할 수 나노초의 분해능을 갖는다. 귀하의 질문에 인쇄 된 값은 그 힌트를 제공합니다. 가장 좋은 방법은 다음 time.strftime 사용할 수있는 1 억 t의 적분 값을 분할하는 것입니다

1) datetime64 해상도

나노초되어이를 사용하여

>>> import time 
>>> time.strftime("%Y.%m.%d", time.gmtime(t.astype(int)/1000000000)) 
2012.07.01 

을, 두 가정의 의식

2) datetime64에 저장된 시간은 UTC에

측면 주 1 : 흥미롭게 NumPy와 개발자가 결정 [1]그런 10 마이크로 초보다 큰 해상도를 가진 객체는 long 유형으로 변환됩니다. 이는 t.astype(datetime.datetime)1341100800000000000L 인 이유를 설명합니다. 그 이유는 datetime.datetime에 의해 지원되는 해상도가 단지 마이크로 초이기 때문에 datetime.datetime 개체가 나노초 또는 더 정밀한 시간 단위를 정확하게 나타낼 수 없기 때문입니다.

측면 주 2 : NumPy와 1.10 사이에 다른 규칙을 조심 이전 이상 1.11 VS : NumPy와 < = 1.10

  • 가 datetime64은 UTC로 내부적으로 저장하고, 로컬 시간으로서 출력된다. 구문 분석은 TZ가 지정되지 않은 경우 로컬 시간을 가정합니다. 그렇지 않으면 시간대 오프셋이 고려됩니다.

  • (numpy> = 1.11) datetime64는 시간대를 불가지론하지 않는 값 (1970 년 1 월 1 일 00:00부터 지정되지 않은 시간대)으로 내부적으로 저장되어 인쇄됩니다. 시간 분석은 시간대를 가정하지 않지만 +NNNN 스타일 시간대 시프트가 여전히 허용되고 값이 UTC로 변환됩니다.

[1] : https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/datetime.c 루틴 convert_datetime_to_pyobject 참조.당신이 변환 듣기 힘든하고 싶어하고 한 날짜 형식으로 확인되어 있지 않은 경우

4

, 이것은

str(t)[:10] 
Out[11]: '2012-07-01' 
관련 문제