파이썬에서 날짜를 날짜 / 시간으로 변환


632

주어진 날짜의 자정을 얻는 것과 같이 datea datetime를 파이썬으로 변환하는 기본 제공 방법이 datetime있습니까? 반대의 변환이 용이 : datetime.date()방법을.

정말 수동으로 전화 datetime(d.year, d.month, d.day)해야합니까?


118
바보 같은 질문이 아닙니다. 날짜 객체에는 .datetime()메소드 가 있어야합니다 . 어리석은 것은 그러한 방법이 없다는 것입니다.
Zags

9
@Zags : 또는 datetime.from_date()생성자.
jfs

2
@DavidNemeskey : 내 의견에 대한 Zags의 의견을 읽으십시오. 존재 해야 할 방법에 관한 것 입니다.
jfs

2
@ JFSebastian : 나는 그것이 어떻게 그리웠는지 전혀 모른다 ... 그리고 나는 완전히 동의한다.
David Nemeskey

7
아니요 날짜는 날짜 시간의 하위 집합이 아니어야합니다 (이름에도 있음). 날짜와 날짜가 무엇인지 분명합니다. 그러나 다른 방식으로, 날짜는 24 시간 (대개) 블록이므로 많은 날짜 시간을 가질 수 있습니다. 날짜에서 어떤 날짜 시간이 나옵니까? 일광 절약 시간제와 같이 해당 시간이 존재하지 않는 경우 시간이 생략되어 항상 00:00 일 수는 없습니다. 너무 쉬운 #
dalore

답변:


804

당신은 사용할 수 있습니다 datetime.combine(date, time); 당분간 datetime.time자정으로 초기화 된 객체 를 만듭니다 .

from datetime import date
from datetime import datetime

dt = datetime.combine(date.today(), datetime.min.time())

79
감사. time ()이 (0,0)을 반환한다는 사실과 결합하여 이것이 가장 datetime.combine(d, time())
EMP

33
코드가 datetime.time ()과 time.time ()을 혼동하지 않도록주의하십시오. 정규화 된 이름 FTW!
더스틴

8
예, 좋은 지적입니다. 다행히도 a time.time또는 a 이외의 다른 항목 을 전달하면 combine ()에서 예외가 발생합니다 datetime.time.
EMP

21
자정를 들어, 하나 datetime.time.min (2.7.1+) 또는 datetime.min.time () (나이 파이썬)에서 파이썬 상수있다
larham1

16
좋은 해결책이지만 datetime.min.time ()이 00:00:00 시간을 얻는 가장 깨끗한 방법이라고 생각하지 않습니다. 그것이하는 일은 먼저 datetime으로 표현할 수있는 최소값을 검색 한 다음 시간 구성 요소를 가져 오기 때문입니다. 또한 datetime.min = datetime (MINYEAR, 1, 1, tzinfo = None)이며 시간은 00:00:00입니다. 그러나 time.min 또는 time (0, 0, 0, 0)을 통해 00:00:00 시간을 명시 적으로 만드는 것이 더 깨끗하다고 ​​생각합니다.
Florin Dumitrescu

130

당신이 언급하고 싫어하는 것이 가장 읽기 쉬운 방법이라고 생각하지만 몇 가지 방법이 있습니다.

>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)

등등-그러나 기본적으로 그것들은 모두 date객체 로부터 정보를 적절히 추출 하고 그것을 위해 적절한 ctor 나 classfunction으로 다시 쟁기질하는 것에 달려 있습니다 datetime.


12
아주 좋은 지적입니다. datetime(d.year, d.month, d.day)허용 된 답변보다 훨씬 더 읽기 쉬운 것 같습니다 datetime.combine(d, datetime.min.time()).
Simon Tewsi 2016 년

2
@SimonTewsi : midnight = datetime.datetime.combine(d, datetime.time.min)더 깨끗해 보인다 ( @larham1에 의해 제 안됨 )
jfs

2
@ JF Sebastian : 다소 깨끗하지만 Wes Winham은 독자가 datetime.time.min이 무엇을 나타내는 지 알아야한다는 그의 대답에 동의합니다. datetime(d.year, d.month, d.day)더 분명한 것처럼 보이는 반면 (시간 구성 요소가없는 날짜 시간). 그러나 중요한 것은 "자정"과 같은 변수 이름을 사용하면 독자가 무엇을 datetime.time.min나타내는 지 모르더라도 결과가 무엇인지 분명하게 알 수 있습니다.
Simon Tewsi 23시 48 분


76

허용 된 답변은 정확하지만 사용 datetime.min.time()하는 것이 정확하지 않기 때문에 사용 하지 않는 것이 좋습니다. 그것이 당신에게 분명하다면, 당신에게 더 많은 힘. 나는 또한 timetuple방법과 주문에 대한 의존성에 대해서도 같은 방식으로 생각합니다 .

내 의견으로는 datetime모듈 API에 대해 잘 알고 독자에게 의존하지 않고 이것을 읽을 수있는 가장 읽기 쉽고 명확한 방법 은 다음과 같습니다.

from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year, 
    month=today.month,
    day=today.day,
)

"명시적인 것이 묵시적인 것보다 낫다"


Kyle Gibson에게 독창적 인 아이디어를주는 모자 팁 : stackoverflow.com/users/513197/kyle-gibson
Wes Winham

나는 당신의 감정에 동의합니다. timetuple 및 별표와 min.time ()이있는 다른 모든 대답에는 연구가 필요하며 날짜 및 날짜 시간을 처리하는 Python 방식은 Microsoft가 VBA에서 쉽게 처리하는 것과 비교하여 다소 번거 롭습니다. 해당 언어의 해시 기호로 감싸는 것만 큼 간단합니다. 그러나 나는 산만하다.
Bobort

2
d2dt = lambda date: datetime(year=date.year, month=date.month, day=date.day)이 답변의 라이너 기능.
aliqandil

이것은 작동하지만 datetime시간대를 인식 해야 할 수도 있습니다. 이 경우 예 import pytz를 들어을 추가 한 다음 추가 할 수 있습니다 tzinfo=pytz.timezone('Europe/London').
alstr

48

date.timetuple()메소드와 압축 풀기 연산자를 사용할 수 있습니다 *.

args = d.timetuple()[:6]
datetime.datetime(*args)

3
이것은 내 상황에 유용합니다. 나는 그것이 지나가는 날짜 또는 날짜 시간인지 알지 못하며 그것이 어떤 클래스인지 확인하는 것은 비현실적이지 않습니다. 이 방법은 datetime 및 date 객체 모두에서 작동하는 것처럼 보입니다.
Gattster

datetime.combine@kiamlaluno의 답변을 통해 발견하기 전에 이것을 사용했습니다 . 나는 그것이 꽤 비유 적이라고 생각합니다. 특히 datetime.time물체를 만드는 것이 datetime.time(*map(int,"H:M:S".split(":")))어쨌든 비슷하게 보일 것 입니다 ...
Tom

1
이것은 내가 가장 좋아하는 답변입니다
Nam G VU

8

오늘 2016 년에 팬더 타임 스탬프가 가장 깨끗한 솔루션을 제공한다고 생각합니다.

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

타임 스탬프는 날짜 / 시간에 해당하는 팬더이며 대부분의 경우 팬더와 호환됩니다. 검사:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

그러나 바닐라 날짜 시간을 정말로 원한다면 여전히 할 수 있습니다.

pd.Timestamp(d).to_datetime()

타임 스탬프는 시간대를 처리 할 때 다른 것보다 날짜 / 시간보다 훨씬 강력합니다. 실제로, 타임 스탬프는 매우 강력하여 문서화가 잘되어 있지 않은 것이 유감입니다 ...


잘 했어 팬더 DatetimeIndex 문제에 대한 파이썬 날짜 시간 솔루션이 필요하다고 생각 했으므로 여기에 왔습니다. 부끄러운 팬더에는 DateIndex라는 개념이 없습니다.
Little Bobby Tables

6
2016 년에도 날짜 / 시간 조작을 수행하기 위해 헤비급 패키지가 필요한 이유는 무엇입니까?!
cowbert

팬더를 꺼내는 것은 개미에게 망치를 가져가는 것과 같습니다
Deji S

5

아직 언급되지 않은 날짜에서 날짜 시간으로 변환하는 한 가지 방법 :

from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')

1
사실, int를 문자열로 변환하고 다시 변환하는 것은 int를 직접 사용하는 것보다 다소 비쌀 수 있습니다. 따라서 저용량 처리에만이 코드를 사용합니다
Egor Kraev


-10

빠른 것이 필요한 경우 datetime_object.date()날짜 / 시간 객체의 날짜를 제공합니다.


8
연산은 가고, 반대로 원 datedatetime.
Tom

질문에서 : 반대의 변환이 용이 : 방법을. 대담한 강조 광산. datetime.date()
Martijn Pieters

-13

저는 파이썬 초보자입니다. 그러나이 코드는 내가 제공 한 지정된 입력을 datetime으로 변환하는 데 효과적이었습니다. 코드는 다음과 같습니다. 틀 렸으면 말해줘.

import sys
from datetime import datetime
from time import mktime, strptime

user_date = '02/15/1989'
if user_date is not None:
     user_date = datetime.strptime(user_date,"%m/%d/%Y")
else:
     user_date = datetime.now()
print user_date

OP에는 문자열이 아닌datetime.date() 객체 가 있습니다.
Martijn Pieters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.