[python] 파이썬에서 DateTime 객체의 시간을 자르는 방법은 무엇입니까?

파이썬 날짜 시간 객체를 자르는 고급 방법은 무엇입니까?

이 특별한 경우, 오늘까지. 기본적으로시, 분, 초 및 마이크로 초를 0으로 설정합니다.

출력이 문자열이 아닌 datetime 객체가되기를 원합니다.



답변

나는 이것이 당신이 찾고있는 것이라고 생각합니다 …

>>> import datetime
>>> dt = datetime.datetime.now()
>>> dt = dt.replace(hour=0, minute=0, second=0, microsecond=0) # Returns a copy
>>> dt
datetime.datetime(2011, 3, 29, 0, 0)

그러나 시간의 측면에 신경 쓰지 않는다면 실제로 물건 주위를 통과해야 date합니다 …

>>> d_truncated = datetime.date(dt.year, dt.month, dt.day)
>>> d_truncated
datetime.date(2011, 3, 29)


답변

시간에 신경 쓰지 date않는다면 a를 사용하십시오 datetime.

>>> now = datetime.now()
>>> now.date()
datetime.date(2011, 3, 29)

다음과 같이 날짜 시간을 업데이트 할 수 있습니다.

>>> now.replace(minute=0, hour=0, second=0, microsecond=0)
datetime.datetime(2011, 3, 29, 0, 0)


답변

4 년 후 : 피하는 또 다른 방법 replace

나는 4 년 전에 받아 들여진 대답이 작동한다는 것을 알고 있지만 다음을 사용하는 것보다 약간 가벼운 것 같습니다 replace.

dt = datetime.date.today()
dt = datetime.datetime(dt.year, dt.month, dt.day)

노트

  • datetime시간 속성을 생성자에 전달하지 않고 객체 를 만들면 자정이됩니다.
  • 다른 사람들이 지적했듯이, 이것은 나중에 timedelta와 함께 사용하기 위해 datetime 객체를 원한다고 가정합니다.
  • 물론 첫 번째 줄로 이것을 대체 할 수 있습니다. dt = datetime.datetime.now()

답변

날짜 시간 객체 는 변경할 수 없으므로 잘라낼 수 없습니다 .

그러나 다음은 원래 날짜 또는 tzinfo를 버리지 않고 0 시간, 분, 초 및 마이크로 초 필드로 새로운 날짜 시간을 구성하는 한 가지 방법입니다.

newdatetime = now.replace(hour=0, minute=0, second=0, microsecond=0)


답변

주어진 datetime 객체에 해당하는 자정을 얻으려면 datetime.combine()method를 사용할 수 있습니다 .

>>> from datetime import datetime, time
>>> dt = datetime.utcnow()
>>> dt.date()
datetime.date(2015, 2, 3)
>>> datetime.combine(dt, time.min)
datetime.datetime(2015, 2, 3, 0, 0)

에 비해 장점 방법 이다 기반 솔루션을 경우에도 계속 작동 모듈 출시는 나노초 지원 ..replace()datetime.combine()datetime

tzinfoDST 전환으로 인해 자정에 utc 오프셋이 다를 수 있으므로 순진 솔루션 (설정 tzinfo시간 속성)이 실패 할 수 있습니다. 참조 내가 특정 시간대에 대해 “자정”의 UTC 시간을 어떻게합니까?


답변

팬더 를 사용할 수 있습니다 (해당 작업에는 오버 헤드가 발생할 수 있음). 일반적인 숫자 및 오프셋 별칭의 팬더 주파수와 같이 round , floorceil을 사용할 수 있습니다 .

import pandas as pd
import datetime as dt

now = dt.datetime.now()
pd_now = pd.Timestamp(now)

freq = '1d'
pd_round = pd_now.round(freq)
dt_round = pd_round.to_pydatetime()

print(now)
print(dt_round)

"""
2018-06-15 09:33:44.102292
2018-06-15 00:00:00
"""


답변

datetime.strftime을 사용하여 일, 월, 년을 추출 할 수 있습니다 …

예 :

from datetime import datetime
d = datetime.today()

# Retrieves the day and the year
print d.strftime("%d-%Y")

출력 (오늘의 경우) :

29-2011

요일을 검색하려는 경우 다음과 같이 요일 속성을 사용할 수 있습니다.

from datetime import datetime
d = datetime.today()

# Retrieves the day
print d.day

출력 (오늘) :

29