Về cơ bản tôi có nghịch đảo của vấn đề này: thời gian python giây đến h: m: s
Tôi có một chuỗi ở định dạng h: mm: ss (luôn luôn 2 chữ số trong vài phút và giây) và tôi cần số số giây mà nó đại diện. Làm thế nào tôi có thể làm điều này trong Python?
Ví dụ:
- "1:23:45" sẽ tạo ra đầu ra là 5025
- "0:04:15" sẽ tạo ra đầu ra là 255
- "0:00:25" sẽ tạo ra đầu ra 25
vân vân
hỏi ngày 19 tháng 6 năm 2011 lúc 14:05Jun 19, 2011 at 14:05
1
def get_sec(time_str): """Get seconds from time.""" h, m, s = time_str.split(':') return int(h) * 3600 + int(m) * 60 + int(s) print(get_sec('1:23:45')) print(get_sec('0:04:15')) print(get_sec('0:00:25'))
Leopardshark
2.9972 Huy hiệu vàng20 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges20 silver badges31 bronze badges
Đã trả lời ngày 19 tháng 6 năm 2011 lúc 14:11Jun 19, 2011 at 14:11
Taskinoortaskinoortaskinoor
45K12 Huy hiệu vàng116 Huy hiệu bạc139 Huy hiệu đồng12 gold badges116 silver badges139 bronze badges
0
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs)
Đã trả lời ngày 19 tháng 6 năm 2011 lúc 14:22Jun 19, 2011 at 14:22
FMCFMCFMc
41.3K13 Huy hiệu vàng76 Huy hiệu bạc131 Huy hiệu đồng13 gold badges76 silver badges131 bronze badges
5
Sử dụng mô -đun DateTime
import datetime t = '10:15:30' h,m,s = t.split(':') print(int(datetime.timedelta(hours=int(h),minutes=int(m),seconds=int(s)).total_seconds()))Đầu ra: 36930
Đã trả lời ngày 14 tháng 5 năm 2014 lúc 22:52May 14, 2014 at 22:52
Kaushkaushkaush
1611 Huy hiệu bạc7 Huy hiệu đồng1 silver badge7 bronze badges
3
Không có nhiều kiểm tra và giả sử đó là "SS" hoặc "MM: SS" hoặc "HH: MM: SS" (mặc dù không nhất thiết là hai chữ số mỗi phần):
def to_seconds(timestr): seconds= 0 for part in timestr.split(':'): seconds= seconds*60 + int(part, 10) return seconds >>> to_seconds('09') 9 >>> to_seconds('2:09') 129 >>> to_seconds('1:02:09') 3729Đây là một câu trả lời chính tả khác về câu trả lời của FMC :)
Đã trả lời ngày 19 tháng 6 năm 2011 lúc 14:46Jun 19, 2011 at 14:46
Tzottzottzot
89.5K29 Huy hiệu vàng138 Huy hiệu bạc201 Huy hiệu đồng29 gold badges138 silver badges201 bronze badges
2
Sử dụng mô -đun ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 7 cũng có thể xác định và mạnh mẽ hơn
import datetime as dt def get_total_seconds(stringHMS): timedeltaObj = dt.datetime.strptime(stringHMS, "%H:%M:%S") - dt.datetime(1900,1,1) return timedeltaObj.total_seconds()ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 8 phân tích chuỗi theo định dạng%H:%m:%s và nó tạo ra một đối tượng DateTime là năm 1900, tháng2, ngày 1, giờ H, phút M và S. thứ hai S.
Đó là lý do tại sao để có được tổng số giây là cần thiết để trừ đi năm, tháng và ngày.
print(get_total_seconds('1:23:45')) >>> 5025.0 print(get_total_seconds('0:04:15')) >>> 255.0 print(get_total_seconds('0:00:25')) >>>25.0Đã trả lời ngày 19 tháng 5 năm 2020 lúc 11:52May 19, 2020 at 11:52
DanitebadanitebaDaniTeba
Phim huy hiệu bạc 181151 silver badge5 bronze badges
1
Bạn có thể sử dụng Lambda và giảm danh sách và thực tế là M = 60s và H = 60m. (Xem "Giảm danh sách" tại //www.python-course.eu/lambda.php)
timestamp = "1:23:45" seconds = reduce(lambda x, y: x*60+y, [int(i) for i in (timestamp.replace(':',',')).split(',')])Đã trả lời ngày 8 tháng 4 năm 2017 lúc 15:53Apr 8, 2017 at 15:53
Bạn có thể chia thời gian thành một danh sách và thêm từng thành phần thời gian riêng lẻ, nhân thành phần giờ với 3600 (số giây trong một giờ) và thành phần phút với 60 (số giây trong một phút), như:
timeInterval ='00:35:01' list = timeInterval.split(':') hours = list[0] minutes = list[1] seconds = list[2] total = (int(hours) * 3600 + int(minutes) * 60 + int(seconds)) print("total = ", total)
Đã trả lời ngày 24 tháng 8 năm 2018 lúc 9:46Aug 24, 2018 at 9:46
Cho%h:%m:%S.%F
def get_sec(time_str): h, m, s = time_str.split(':') return int(h) * 3600 + int(m) * 60 + float(s)Đã trả lời ngày 9 tháng 9 năm 2021 lúc 9:40Sep 9, 2021 at 9:40
parts = time_string.split(":") seconds = int(parts[0])*(60*60) + int(parts[1])*60 + int(parts[2])
Đã trả lời ngày 19 tháng 6 năm 2011 lúc 14:10Jun 19, 2011 at 14:10
DaclowndaclownDaClown
3.9216 Huy hiệu vàng30 Huy hiệu bạc 30 Huy hiệu Đồng6 gold badges30 silver badges30 bronze badges
1
Tôi không thực sự thích bất kỳ câu trả lời nào trong số đó, vì vậy tôi đã sử dụng như sau:
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 0
Jayrizzo
2.7923 huy hiệu vàng31 Huy hiệu bạc42 Huy hiệu đồng3 gold badges31 silver badges42 bronze badges
Đã trả lời ngày 30 tháng 8 năm 2017 lúc 23:18Aug 30, 2017 at 23:18
0
Mở rộng trên giải pháp của @FMC thể hiện một nửa phương pháp của Horner. Ưu điểm của phương pháp của Horner: Bỏ qua việc đảo ngược danh sách, tránh tính toán công suất.
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 1Hoặc, nếu bạn không thích giảm (cũng như Guido Van Rossum và @0xc0de bên dưới):
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 2Nếu bạn thích ZIP (cũng như @Nathan-Rice bên dưới):
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 3Đã trả lời ngày 22 tháng 8 năm 2019 lúc 13:12Aug 22, 2019 at 13:12
1
Một cách khác nếu bạn có nhiều ngày trên chuỗi:
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 4Đã trả lời ngày 15 tháng 10 năm 2014 lúc 23:47Oct 15, 2014 at 23:47
ItaluxitaluxItalux
751 Huy hiệu vàng1 Huy hiệu bạc9 Huy hiệu đồng1 gold badge1 silver badge9 bronze badges
2
Chỉ là một khái quát đơn giản cho phản ứng tuyệt vời của Taskinoor
Trong bối cảnh vấn đề của tôi, định dạng tương tự, nhưng bao gồm AM hoặc PM.
Định dạng 'HH: MM: SS AM' hoặc 'HH: MM: SS PM'
Đối với trường hợp này, chức năng thay đổi thành:
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 5Đã trả lời ngày 16 tháng 11 năm 2020 lúc 20:18Nov 16, 2020 at 20:18
Trong gấu trúc sử dụng chức năng tuyệt vời của @Jayrizzo và danh sách hiểu biết:
ts = '1:23:45' secs = sum(int(x) * 60 ** i for i, x in enumerate(reversed(ts.split(':')))) print(secs) 6
Sven Eberth
2.98612 Huy hiệu vàng22 Huy hiệu bạc27 Huy hiệu đồng12 gold badges22 silver badges27 bronze badges
Đã trả lời ngày 22 tháng 6 năm 2021 lúc 18:38Jun 22, 2021 at 18:38