파이썬에서 2번의 차이를 찾는 가장 간단한 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/51010

  •  09-06-2019
  •  | 
  •  

문제

유형이 있는 2개의 시간 값이 있습니다. datetime.time.나는 그들의 차이점을 찾고 싶다.해야 할 일은 t1 - t2이지만 이는 작동하지 않습니다.유형의 객체에 대해 작동합니다. datetime.datetime 하지만 그렇지 않다 datetime.time.그렇다면 이를 수행하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

첫째, datetime.time은 특정 날짜와 무관한 시간이므로 두 datetime.time 값 간의 차이는 24시간 미만입니다.

한 가지 접근 방식은 두 datetime.time 값을 비교 가능한 값(예: 밀리초)으로 변환하고 차이점을 찾는 것입니다.

t1, t2 = datetime.time(...), datetime.time(...)

t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond

delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])

조금 절름발이이지만 작동합니다.

다른 팁

약간 어리석은 일이지만 다음을 사용하여 임의의 날짜를 선택하고 매일 해당 날짜에 삽입해 볼 수 있습니다. datetime.datetime.combine, 다음을 뺍니다.

>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)

둘 다로 변환할 수 있습니다. 타임델타 객체 이를 서로 빼면 이월이 처리됩니다.예를 들어:

>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>>  print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00

Python의 음수 timedelta 객체는 음수 날짜 필드를 가지며 다른 필드는 양수입니다.미리 확인할 수 있습니다.비교는 time 객체와 timedelta 객체 모두에서 작동합니다.

>>> dt2 < dt1
True
>>> t2 < t1
True

파이썬에는 pytz(http://pytz.sourceforge.net) '시간' 객체의 산술에 사용할 수 있는 모듈입니다.DST 오프셋도 처리합니다.위 페이지에는 pytz의 사용법을 보여주는 여러 가지 예가 있습니다.

datetime.time의 오버플로를 처리하는 좋은 방법이 없기 때문에 이는 지원되지 않는 것 같습니다.나는 이것이 직접적인 대답이 아니라는 것을 알고 있지만 아마도 나보다 Python 경험이 더 많은 사람이 이것을 조금 더 발전시킬 수 있습니다.자세한 내용은 다음을 참조하세요. http://bugs.python.org/issue3250

밀리초 단위로 시간을 검색한 다음 빼기를 수행합니다.

Environment.TickCount는 빠른 작업이 필요한 경우 잘 작동하는 것 같습니다.

int start = Environment.TickCount

...DoSomething()

int elapsedtime = Environment.TickCount - 시작

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top