2015-01-12 1 views
0

여기서 잘못된 것은 무엇입니까?datetime TypeError : 'datetime.datetime'개체에 '__getitem__'특성이 없습니다.

import datetime 

someday = datetime.datetime(2014, 9, 23, 0, 0) 

someday = datetime.datetime.strptime(someday[:10], '%Y-%m-%d') 
print someday 

오류 :

TypeError: 'datetime.datetime' object has no attribute '__getitem__' 
+0

여기에서 해결하려는 실제 문제는 무엇입니까? "날짜 시간의 날짜 부분을 가져 오는 것"이라면'.date()'메서드를 사용할 수 있습니다. –

+0

가능한 [TypeError : 'datetime.date'개체의 복제본에 '\ _ \ _ getitem \ _ \ _'속성이 없습니다] (http://stackoverflow.com/questions/20831994/typeerror-datetime-date-object-has- no-attribute-getitem) – GLHF

답변

4

someday가 슬라이스를 지원하지 않는 datetime 객체입니다. 따라서 someday[:10]을 실행하면 TypeError가됩니다.

someday = datetime.datetime.strptime(str(someday)[:10], '%Y-%m-%d') 

데모 :

>>> import datetime 
>>> someday = datetime.datetime(2014, 9, 23, 0, 0) 
>>> 
>>> someday # This is a datetime object 
datetime.datetime(2014, 9, 23, 0, 0) 
>>> someday[:10] # Does not support slicing 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'datetime.datetime' object has no attribute '__getitem__' 
>>> 
>>> str(someday) # This returns a string 
'2014-09-23 00:00:00' 
>>> str(someday)[:10] # Supports slicing 
'2014-09-23' 
>>> 
+0

또는 단지'str (someday.date()) '를 사용할 수 있습니다 ... – MattDMo

+0

문자열과의 변환은 여기에서 불필요합니다. 그냥 (대신에'print someday.date()'를 사용하십시오 (http://stackoverflow.com/a/27987553/4279). – jfs

+0

@ J.F.Sebastian - 제 답변은 주로 OP의 슬라이스가 실패하고 슬라이싱을 사용하는 방법에 초점을 맞추 었습니다. 그러나, 나는'.date()'를 호출하는 것이이 경우 훨씬 더 파이썬적임에 동의한다. 그것을 언급 +1. :) – iCodez

1

someday 따라서 당신이 [:10]을 적용하여 문자열을받지 않습니다 문자열이 아닌 당신이 그것을 슬라이스 전에

당신은 문자열로 someday 변환해야합니다. datetime 개체입니다.

datetime 객체에서 날짜를 얻으려면, .date() 메서드를 호출하려면 다음

print someday.date() 

datetime.strptime()를 사용하여 즉시 다시 변환 str()를 사용하여 문자열로 someday를 변환하는 변환 할 필요.