10000 giây bằng bao nhiêu Giờ

Tôi có một chức năng trả về thông tin trong vài giây, nhưng tôi cần lưu trữ thông tin đó trong vài giờ: phút: giây.

Có cách nào dễ dàng để chuyển đổi giây thành định dạng này trong Python không?

Bạn có thể sử dụng datetime.timedeltachức năng: >>> import datetime >>> str[datetime.timedelta[seconds=666]]'0:11:06'

Bằng cách sử dụng divmod[]hàm, chỉ thực hiện một phép chia duy nhất để tạo ra cả thương số và phần còn lại, bạn có thể có kết quả rất nhanh chỉ với hai phép toán: m, s = divmod[seconds, 60]h, m = divmod[m, 60]

Và sau đó sử dụng định dạng chuỗi để chuyển đổi kết quả thành đầu ra mong muốn của bạn: print['{:d}:{:02d}:{:02d}'.format[h, m, s]] # Python 3print[f'{h:d}:{m:02d}:{s:02d}'] # Python 3.6+

Tôi khó có thể đặt tên theo cách dễ dàng [ít nhất là tôi không thể nhớ cú pháp], nhưng có thể sử dụng time.strftime , giúp kiểm soát định dạng nhiều hơn: from time import strftime from time import gmtime strftime["%H:%M:%S", gmtime[666]]'00:11:06' strftime["%H:%M:%S", gmtime[60*60*24]]'00:00:00'

gmtime được sử dụng để chuyển đổi giây sang định dạng tuple đặc biệt strftime[]yêu cầu.

Lưu ý: Cắt ngắn sau 23:59:59

Sử dụng datetime:

Với ':0>8'định dạng: from datetime import timedelta "{:0>8}".format[str[timedelta[seconds=66]]]# Result: '00:01:06' "{:0>8}".format[str[timedelta[seconds=666777]]]# Result: '7 days, 17:12:57' "{:0>8}".format[str[timedelta[seconds=60*60*49+109]]]# Result: '2 days, 1:01:49'

Không có ':0>8'định dạng: "{}".format[str[timedelta[seconds=66]]]# Result: '00:01:06' "{}".format[str[timedelta[seconds=666777]]]# Result: '7 days, 17:12:57' "{}".format[str[timedelta[seconds=60*60*49+109]]]# Result: '2 days, 1:01:49'

Sử dụng time: from time import gmtime from time import strftime # NOTE: The following resets if it goes over 23:59:59! strftime["%H:%M:%S", gmtime[125]]# Result: '00:02:05' strftime["%H:%M:%S", gmtime[60*60*24-1]]# Result: '23:59:59' strftime["%H:%M:%S", gmtime[60*60*24]]# Result: '00:00:00' strftime["%H:%M:%S", gmtime[666777]]# Result: '17:12:57'# Wrong

Đây là mẹo nhanh của tôi: from humanfriendly import format_timespan secondsPassed = 1302format_timespan[secondsPassed]# '21 minutes and 42 seconds'

Để biết thêm thông tin Truy cập: //humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespan

Nếu bạn cần nhận được datetime.timegiá trị, bạn có thể sử dụng thủ thuật này: my_time = [datetime[1970,1,1] + timedelta[seconds=my_seconds]].time[]

Bạn không thể thêm timedeltavào time, nhưng có thể thêm nó vào datetime.

CẬP NHẬT : Một biến thể khác của cùng một kỹ thuật: my_time = [datetime.fromordinal[1] + timedelta[seconds=my_seconds]].time[]

Thay vì 1bạn có thể sử dụng bất kỳ số nào lớn hơn 0. Ở đây chúng tôi sử dụng thực tế là datetime.fromordinalsẽ luôn trả về datetimeđối tượng có timethành phần bằng không.

Đây là cách tôi có nó. def sec2time[sec, n_msec=3]:    ''' Convert seconds to 'D days, HH:MM:SS.FFF' '''    if hasattr[sec,'__len__']:        return [sec2time[s] for s in sec]    m, s = divmod[sec, 60]    h, m = divmod[m, 60]    d, h = divmod[h, 24]    if n_msec > 0:        pattern = '%%02d:%%02d:%%0%d.%df' % [n_msec+3, n_msec]    else:        pattern = r'%02d:%02d:%02d'    if d == 0:        return pattern % [h, m, s]    return ['%d days, ' + pattern] % [d, h, m, s]

Vài ví dụ: $ sec2time[10, 3]Out: '00:00:10.000' $ sec2time[1234567.8910, 0]Out: '14 days, 06:56:07' $ sec2time[1234567.8910, 4]Out: '14 days, 06:56:07.8910' $ sec2time[[12, 345678.9], 3]Out: ['00:00:12.000', '4 days, 00:01:18.900']

Các bộ sau đây làm việc cho tôi. def sec_to_hours[seconds]:    a=str[seconds//3600]    b=str[[seconds%3600]//60]    c=str[[seconds%3600]%60]    d=["{} hours {} mins {} seconds".format[a, b, c]]    return d print[sec_to_hours[10000]]# ['2 hours 46 mins 40 seconds'] print[sec_to_hours[60*60*24+105]]# ['24 hours 1 mins 45 seconds']

dateutil.relativedeltathuận tiện nếu bạn cần truy cập hàng giờ, phút và giây như phao. datetime.timedeltakhông cung cấp một giao diện tương tự. from dateutil.relativedelta import relativedelta rt = relativedelta[seconds=5440]print[rt.seconds]print['{:02d}:{:02d}:{:02d}'.format[    int[rt.hours], int[rt.minutes], int[rt.seconds]]]

Bản in 40.001:30:40

giờ [h] được tính bằng cách chia sàn [bằng //] giây bằng 3600 [60 phút / giờ * 60 giây / phút]

phút [m] được tính bằng cách chia tầng của các giây còn lại [phần còn lại từ tính toán giờ, theo%] cho 60 [60 giây / phút]

tương tự, giây [s] bằng phần còn lại của giờ và phút tính toán.

Phần còn lại chỉ là định dạng chuỗi! def hms[seconds]:    h = seconds // 3600    m = seconds % 3600 // 60    s = seconds % 3600 % 60    return '{:02d}:{:02d}:{:02d}'.format[h, m, s] print[hms[7500]]  # Should print 02h05m00s

Bạn có thể chia giây cho 60 để có được số phút import time seconds = time.time[]minutes = seconds / 60print[minutes]

Khi bạn chia nó cho 60 lần nữa, bạn sẽ nhận được số giờ

division = 3623 // 3600 #to hoursdivision2 = 600 // 60 #to minutesprint [division] #write hoursprint [division2] #write minutes

PS Mã của tôi không chuyên nghiệp

Video liên quan

Chủ Đề