답변:
나는 이것이 당신이 찾고있는 것이라고 생각합니다 ...
>>> 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)
datetime
아닌을 원합니다 date
( dt.date()
호출을 사용할 수 있습니다 (명시 적 생성자를 사용할 필요가 없음)). .replace()
경우 방법이 실패 할 수 있습니다 datetime
나노초 지원을 추가합니다 . 대신 사용할datetime.combine()
수 있습니다 .
datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
?
시간에 신경 쓰지 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)
replace
나는 4 년 전에 받아 들여진 대답이 작동한다는 것을 알고 있지만 다음을 사용하는 것보다 약간 가벼운 것 같습니다 replace
.
dt = datetime.date.today()
dt = datetime.datetime(dt.year, dt.month, dt.day)
노트
datetime
시간 속성을 생성자에 전달하지 않고 객체 를 만들면 자정이됩니다.dt = datetime.datetime.now()
날짜 시간 객체 는 변경할 수 없으므로 잘라낼 수 없습니다 .
그러나 다음은 원래 날짜 또는 tzinfo를 버리지 않고 0 시간, 분, 초 및 마이크로 초 필드로 새로운 날짜 시간을 구성하는 한 가지 방법입니다.
newdatetime = now.replace(hour=0, minute=0, second=0, microsecond=0)
replace
옵션을 먼저 설정하면 원하는 옵션 일 수 있습니다.
tzinfo=now.tzinfo
. tzinfo
자정에 다른 예를 할 수있다, UTC는 오프셋 2012-04-01 00:09:00
호주 / 멜버른 시간대에 (오전 9시)입니다 AEST+10:00
만은 AEDT+11:00
시 2012-04-01 00:00:00
(자정) - 당일 끝 DST 전환이있다. pytz
모듈을 사용 하여 문제를 해결할 수 있습니다 . 내 답변을 참조하십시오.
주어진 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
tzinfo
DST 전환으로 인해 자정에 utc 오프셋이 다를 수 있으므로 순진 솔루션 (설정 tzinfo
시간 속성)이 실패 할 수 있습니다. 참조 내가 특정 시간대에 대해 "자정"의 UTC 시간을 어떻게합니까?
팬더 를 사용할 수 있습니다 (해당 작업에는 오버 헤드가 발생할 수 있음). 일반적인 숫자 및 오프셋 별칭의 팬더 주파수와 같이 round , floor 및 ceil을 사용할 수 있습니다 .
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
d.day
.
날짜를 조작하는 데 사용되는 훌륭한 라이브러리가 있습니다 : Delorean
import datetime
from delorean import Delorean
now = datetime.datetime.now()
d = Delorean(now, timezone='US/Pacific')
>>> now
datetime.datetime(2015, 3, 26, 19, 46, 40, 525703)
>>> d.truncate('second')
Delorean(datetime=2015-03-26 19:46:40-07:00, timezone='US/Pacific')
>>> d.truncate('minute')
Delorean(datetime=2015-03-26 19:46:00-07:00, timezone='US/Pacific')
>>> d.truncate('hour')
Delorean(datetime=2015-03-26 19:00:00-07:00, timezone='US/Pacific')
>>> d.truncate('day')
Delorean(datetime=2015-03-26 00:00:00-07:00, timezone='US/Pacific')
>>> d.truncate('month')
Delorean(datetime=2015-03-01 00:00:00-07:00, timezone='US/Pacific')
>>> d.truncate('year')
Delorean(datetime=2015-01-01 00:00:00-07:00, timezone='US/Pacific')
날짜 시간 값을 다시 얻으려면 :
>>> d.truncate('year').datetime
datetime.datetime(2015, 1, 1, 0, 0, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.floor.html 에서 자세히 알아보십시오.
이제 2019 년이며, 가장 효율적인 방법은 다음과 같습니다.
df['truncate_date'] = df['timestamp'].dt.floor('d')
잘림이란 무엇입니까?
strftime () 메소드를 사용하고 적절한 형식 문자열을 사용하여 형식을 완전히 제어 할 수 있습니다.
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
DateTime 유형의 Series를 처리하는 경우 특히 Series 객체에 행이 많은 경우 더 효율적으로 잘라낼 수 있습니다.
플로어 기능을 사용할 수 있습니다
예를 들어 몇 시간으로 자르려면 다음을 수행하십시오.
날짜 범위 생성
times = pd.Series(pd.date_range(start='1/1/2018 04:00:00', end='1/1/2018 22:00:00', freq='s'))
교체 기능과 바닥 기능 간의 작동 시간을 비교하여 확인할 수 있습니다.
%timeit times.apply(lambda x : x.replace(minute=0, second=0, microsecond=0))
>>> 341 ms ± 18.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit times.dt.floor('h')
>>>>2.26 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)