파이썬 시간 + 동등한 timedelta


답변:


138

솔루션은 질문에 제공 한 링크에 있습니다 .

datetime.combine(date.today(), time()) + timedelta(hours=1)

전체 예 :

from datetime import date, datetime, time, timedelta

dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()

산출:

00:25:00

4
무관 한 정보로 데이터를 향상시키는 해결 방법처럼 느껴집니다. 하면 어떻게됩니까 today()일광 절약 시간 전환하기 전에 날이, 그리고 timedelta이 다른 시간대로 확장? 이 코드는 로케일의 영향을 받습니까?
bluenote10

1
@ bluenote10 순진한 datetime 객체는 proleptic Gregorian 달력에 따라 분류되는 정수 마이크로 초입니다. 즉, 답변의 코드는 현지 시간대의 DST 전환 중에도 그대로 작동합니다. date.today()양수 및 음수 타임 델타를 모두 지원하는 데 사용됩니다. date.min긍정적 인 timedeltas에서 작동합니다.
jfs

@JFSebastian : 업데이트에 감사드립니다. 순수해야 할 기능에 부작용이 있으면 여전히 나를 움찔합니다. 9999 년의 사람들은 이것도 좋아하지 않을 것입니다.).
bluenote10 2017-04-05

3
@ bluenote10 실용성은 순수함을 능가합니다. 나는 datetime.MAXYEAR9999에서 9999로 남을 것
jfs

10

프로젝트에 다른 파일 / 종속성을 추가 할 가치가 있다면 datetime.time산술을 수행 할 수있는 기능을 확장하는 작은 클래스를 방금 작성했습니다 . 자정이 지나면 다음과 같이 둘러 쌉니다.

>>> from nptime import nptime
>>> from datetime import timedelta
>>> afternoon = nptime(12, 24) + timedelta(days=1, minutes=36)
>>> afternoon
nptime(13, 0)
>>> str(afternoon)
'13:00:00'

PyPi에서 nptime( "non-pedantic time") 또는 GitHub에서 사용할 수 있습니다. https://github.com/tgs/nptime

문서는 http://tgs.github.io/nptime/에 있습니다.


큰. 이것은 datetime 세계로 돌아가는 왕복 여행을 절약합니다.
여호수아 치아

6

이것은 약간 불쾌하지만 :

from datetime import datetime, timedelta

now = datetime.now().time()
# Just use January the first, 2000
d1 = datetime(2000, 1, 1, now.hour, now.minute, now.second)
d2 = d1 + timedelta(hours=1, minutes=23)
print d2.time()

1
+1 : datetime모듈 용. 그렇지 않으면 오버플로 오류 등을 수동으로 처리해야합니다.
jfs

6

해결 방법 :

t = time()
t2 = time(t.hour+1, t.minute, t.second, t.microsecond)

그다지 정밀도가 필요하지 않은 경우 마이크로 초를 생략 할 수도 있습니다.


네, 좋은 대답입니다. time () + timedelta (minutes = 30)
Antonius Common

6
그렇다면 t == time(23,59)이 방법은 작동하지 않습니다. 추가하는 경우 1t.hour당신은 얻을 것이다ValueError: hour must be in 0..23
JFS

구문 오류를 수정했습니다. 23:59의 경우 문제는 계산의 실제 의도가 무엇인지, 그 경우 결과로 실제로 얻고 싶은 것이 무엇인지입니다. 나는 그것이 같은 날에 있어야한다고 생각했다 (또는 오류를 준다), 그렇지 않으면 당신은 보통 처음에 datetime을 가질 것이다 ...
sth

1
이 방법은 10 월 31 일에 1 일을 추가했기 때문에 오류가 발생했습니다.이 때문에 datetime.timedelta(days=1)datetime 개체에 하루를 추가 해야 합니다. 디버그 땅을 피할 것입니다.
Bobort 2016 년

2

작동하도록 time ()을 now ()로 변경할 수 있습니다.

from datetime import datetime, timedelta
datetime.now() + timedelta(hours=1)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.