타임 델타를 일, 시간 및 분으로 변환


243

타임 델타가 있습니다. 나는 튜플이나 사전으로 그 일, 시간 및 분을 원합니다 ... 나는 소란스럽지 않습니다.

나는 수십 년 동안 수십 개의 언어로 이것을 수십 번 했음에도 불구하고 파이썬은 일반적으로 모든 것에 대한 간단한 대답을 가지고 있기 때문에 메마른 간단한 수학을 파헤 치기 전에 여기에 물었다 고 생각했습니다.

Fooz는 좋은 지적을합니다.

나는 각각의 기간이있는 "목록"(이베이 목록과 약간 비슷 함)을 다루고 있습니다. 나는함으로써 남은 시간을 찾으려고 노력하고있다.when_added + duration - now

DST를 설명하지 않는다고 말하는 것이 옳습니까? 그렇지 않은 경우 한 시간을 더하거나 빼는 가장 간단한 방법은 무엇입니까?


HH : mm : ss 형식 의 문자열 로 가져 오려면 "datetime.timedelta (seconds = 1177)" 개체 에서 "0:19:37" 이라고 말 하십시오 . 간단히 str ()을 사용하십시오.timedelta
Peter Mortensen

답변:


344

당신이있는 경우 datetime.timedelta값을 td, td.days이미 "일"당신이 원하는 당신을 제공합니다. timedelta값은 하루의 소수를 초 (직접시 또는 분이 아닌)로 유지하므로 실제로 "유쾌한 수학"을 수행해야합니다. 예 :

def days_hours_minutes(td):
    return td.days, td.seconds//3600, (td.seconds//60)%60

1
경우에 있다는 사실을 숙지 td부정적이다, -1 // 3600입니다 -1.
jcrs

4
왜 // ? 대신
Mohammed Shareef C

10
///부동 소수점이 아닌 정수를 얻는 대신 사용됩니다 . //바닥 구분 연산자 : "숫자 줄에서 왼쪽으로 정수를 조정 한 구분"은 여기를 참조 하십시오 .
Eerik Sven Puudist 19

1
같은 @EerikSvenPuudist jcrs뾰족한 아웃 -1//3600되고 -1, 왜 사용하지 않는 int(td.seconds/3600)대신십시오 -1에 두 번째 0시간이 아닌 1시간 뒤로?
simpleuser

나머지 초도 추가하는 방법은 무엇입니까? days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60다음 seconds = x.seconds - hours*3600 - minutes*60
라파엘

73

이것은 조금 더 작습니다. 두 줄로 시간, 분 및 초를 얻습니다.

days = td.days
hours, remainder = divmod(td.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
# If you want to take into account fractions of a second
seconds += td.microseconds / 1e6

7
td.days0이 아닌 경우 올바르지 않습니다 . 당신은 필요합니다 hours += td.days*24. 1 초의 분수를 고려하려는 경우 (OP는 그렇지 않음); seconds += td.microseconds / 1e6사용 될수있다.
jfs

30
days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

DST의 경우 가장 좋은 방법은 두 datetime객체를 초로 변환하는 것입니다 . 이렇게하면 시스템이 DST를 계산합니다.

>>> m13 = datetime(2010, 3, 13, 8, 0, 0)  # 2010 March 13 8:00 AM
>>> m14 = datetime(2010, 3, 14, 8, 0, 0)  # DST starts on this day, in my time zone
>>> mktime(m14.timetuple()) - mktime(m13.timetuple())     # difference in seconds
82800.0
>>> _/3600                                                # convert to hours
23.0

1
mktime()로컬 시간대가 다른 시간에 다른 utc 오프셋을 가질 수 있으면 실패 할 수 있습니다 (많은 일). pytz모듈을 사용 하여 이식 가능한 결정적 방식으로 tz 데이터베이스에 액세스 할 수 있습니다 . 또한 현지 시간이 모호 할 수 있습니다 (오류의 50 % 확률). 예를 들어, 항상 (항상 그런 것은 아님) 로그 파일의 날짜가 단조로운 경우 추가 정보가 필요합니다 . 파이썬 날짜에서 하루를 빼려면 어떻게해야합니까?를 참조하십시오 . 비슷한 문제를 처리해야 할 수도 있습니다.
jfs

7

이해가 안 돼요

days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

이건 어때요

days, hours, minutes = td.days, td.seconds // 3600, td.seconds % 3600 / 60.0

플로트로 분과 초를 얻습니다.


0

나는 다음을 사용했다.

delta = timedelta()
totalMinute, second = divmod(delta.seconds, 60)
hour, minute = divmod(totalMinute, 60)
print(f"{hour}h{minute:02}m{second:02}s")

-3

timedeltas에는 daysseconds속성이 있습니다. 쉽게 직접 변환 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.