datetime.time
Python 에 값이 주어지면 정수 초를 추가하는 표준 방법이 있습니까? 예를 들어 11:34:59
+ 3 = 11:35:02
입니까?
이 명백한 아이디어는 효과가 없습니다.
>>> datetime.time(11, 34, 59) + 3
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'
>>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
>>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'
결국 나는 다음과 같은 기능을 작성했다.
def add_secs_to_time(timeval, secs_to_add):
secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
secs += secs_to_add
return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
그래도 더 쉬운 방법이 없다고 생각하면 도움이되지 않습니다.
관련
답변
datetime
와 함께 전체 변수를 사용할 수 있으며 timedelta
더미 날짜를 제공 한 다음 time
시간 값을 얻기 위해 사용 합니다.
예를 들면 다음과 같습니다.
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
3 초 간격으로 두 값이 생성됩니다.
11:34:59
11:35:02
더 읽기 쉬운 것을 선택할 수도 있습니다
b = a + datetime.timedelta(seconds=3)
당신이 너무 기울어 있다면.
이 작업을 수행 할 수있는 기능을 수행하는 경우 addSecs
아래 를 사용하여 살펴볼 수 있습니다.
import datetime
def addSecs(tm, secs):
fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
fulldate = fulldate + datetime.timedelta(seconds=secs)
return fulldate.time()
a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)
이 결과는 다음과 같습니다.
09:11:55.775695
09:16:55
답변
여기에 다른 사람들이 말했듯이 전체 날짜 시간 객체를 사용할 수 있습니다.
from datetime import datetime, date, time, timedelta
sometime = time(8,00) # 8am
later = (datetime.combine(date.today(), sometime) + timedelta(seconds=3)).time()
그러나 왜 완전한 날짜 시간 객체가 필요한지 설명 할 가치가 있다고 생각합니다. 오후 11시에서 2 시간을 더하면 어떻게 될지 생각해보십시오. 올바른 행동은 무엇입니까? 오후 11시 59 분보다 큰 시간을 가질 수 없기 때문에 예외가 있습니까? 다시 감쌀 까?
다른 프로그래머들은 다른 것을 기대할 것이므로, 그들이 선택한 결과는 많은 사람들을 놀라게 할 것입니다. 더 나쁜 것은 프로그래머가 처음 테스트 할 때 제대로 작동하는 코드를 작성한 다음 예상치 못한 작업을 수행하여 나중에 중단되도록하는 것입니다. 이것은 매우 나쁘기 때문에 timedelta 객체를 시간 객체에 추가 할 수 없습니다.
답변
한 가지 작은 점, 몇 초 동안 기본값을 무시하기 위해 선명도를 추가 할 수 있음
>>> b = a + datetime.timedelta(seconds=3000)
>>> b
datetime.datetime(1, 1, 1, 12, 24, 59)
답변
전체 날짜 시간 사용을 제안하는 @Pax Diablo, @bvmou 및 @Arachnid에게 감사합니다. 외부 소스에서 datetime.time 객체를 수락 해야하는 경우 이것은 대체 add_secs_to_time()
기능 인 것 같습니다 .
def add_secs_to_time(timeval, secs_to_add):
dummy_date = datetime.date(1, 1, 1)
full_datetime = datetime.datetime.combine(dummy_date, timeval)
added_datetime = full_datetime + datetime.timedelta(seconds=secs_to_add)
return added_datetime.time()
이 자세한 코드는이 단일 라이너로 압축 될 수 있습니다.
(datetime.datetime.combine(datetime.date(1, 1, 1), timeval) + datetime.timedelta(seconds=secs_to_add)).time()
하지만 어쨌든 코드 선명도를 위해 함수로 마무리하고 싶습니다.
답변
프로젝트에 다른 파일 / 종속성을 추가 할 가치가 있다면, datetime.time
산술 기능으로 확장 되는 작은 클래스를 작성했습니다 . 자정이 지나면 0이됩니다. 이제 “현재 몇시, 24 시간이 지 날까”는 일광 절약 시간, 윤초, 역사적인 시간대 변경 등을 포함하여 많은 경우가 있습니다. 그러나 때로는 간단한 경우가 필요하며 이것이 그렇게 할 것입니다.
귀하의 예는 다음과 같습니다.
>>> import datetime
>>> import nptime
>>> nptime.nptime(11, 34, 59) + datetime.timedelta(0, 3)
nptime(11, 35, 2)
nptime
에서 상속 받으 datetime.time
므로 해당 메소드도 사용할 수 있어야합니다.
PyPi에서 nptime
( “비 보행 시간”) 또는 GitHub에서 사용할 수 있습니다 : https://github.com/tgs/nptime
답변
datetime
어떤 단위가 사용되는지 확실하지 않기 때문에 단순히 숫자를 추가 할 수 없습니다 : 초, 시간, 주 …
timedelta
날짜와 시간을 다루는 수업 이 있습니다 . datetime
마이너스 datetime
제공 timedelta
, datetime
플러스 timedelta
제공 datetime
, 두 개의 datetime
객체는 추가 timedelta
할 수 있지만 두 개의 객체는 추가 할 수 없습니다 .
만들기 timedelta
당신은 추가에 추가하는 방법을 몇 초에 개체 datetime
개체를 :
>>> from datetime import datetime, timedelta
>>> t = datetime.now() + timedelta(seconds=3000)
>>> print(t)
datetime.datetime(2018, 1, 17, 21, 47, 13, 90244)
C ++에는 동일한 개념이 있습니다 std::chrono::duration
.
답변
완벽을 기하기 위해 다음과 같이하는 방법이 있습니다 arrow
(파이썬의 날짜와 시간이 더 낫습니다).
sometime = arrow.now()
abitlater = sometime.shift(seconds=3)