Tôi có một công dụng trả về thông tin trong vài giây, nhưng tôi cần tàng trữ thông tin đó trong vài giờ : phút : giây .Có cách nào thuận tiện để quy đổi giây thành định dạng này trong Python không ?Bạn hoàn toà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 để quy đổi tác dụng thành đầu ra mong ước của bạn : print ( ‘ { : d } : { : 02 d } : { : 02 d } ‘. format ( h, m, s ) ) # Python 3 print ( f ‘ { h : d } : { m : 02 d } : { s : 02 d } ‘ ) # Python 3.6 +Tôi khó hoàn toàn có thể đặt tên theo cách thuận tiện ( tối thiểu là tôi không hề nhớ cú pháp ), nhưng hoàn toàn có thể sử dụng time.strftime, giúp trấn áp đị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 để quy đổi giây sang định dạng tuple đặc biệt quan trọng strftime ( ) nhu yếu .

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

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 = 1302 format_timespan ( secondsPassed ) # ‘ 21 minutes and 42 seconds ‘Để biết thêm thông tin Truy cập : https://humanfriendly.readthedocs.io/en/latest/#humanfriendly.format_timespanNếu bạn cần nhận được datetime. timegiá trị, bạn hoàn toàn có thể sử dụng thủ pháp này : my_time = ( datetime ( 1970,1,1 ) + timedelta ( seconds = my_seconds ) ). time ( )Bạn không hề thêm timedeltavào time, nhưng hoàn toàn 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 = ‘ % % 02 d : % % 02 d : % % 0 % d. % df ‘ % ( n_msec + 3, n_msec ) else : pattern = r ‘ % 02 d : % 02 d : % 02 d ‘ 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 thao tá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 vấn hàng giờ, phút và giây như phao. datetime. timedeltakhông phân phối một giao diện tương tự như. from dateutil.relativedelta import relativedelta rt = relativedelta ( seconds = 5440 ) print ( rt.seconds ) print ( ‘ { : 02 d } : { : 02 d } : { : 02 d } ‘. format ( int ( rt.hours ), int ( rt.minutes ), int ( rt.seconds ) ) )Bản in 40.001 : 30 : 40giờ ( 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 những giây còn lại ( phần còn lại từ thống kê giám sát giờ, theo % ) cho 60 ( 60 giây / phút )tựa như, giây ( s ) bằng phần còn lại của giờ và phút giám sát .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 ‘ { : 02 d } : { : 02 d } : { : 02 d } ‘. format ( h, m, s ) print ( hms ( 7500 ) ) # Should print 02 h05m00s

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 minutesPS Mã của tôi không chuyên nghiệp

Video liên quan

Source: http://139.180.218.5
Category: tản mạn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *