2012-02-07 72 views
6

Tôi đang chạy một số tập lệnh thời gian gnu tạo đầu ra dạng mm: ss.mm (phút, giây và mili giây, ví dụ 1: 20.66) hoặc hh : MM: ss (giờ, phút và giây, ví dụ 1:43:38). Tôi muốn chuyển đổi thành giây (để so sánh chúng và vẽ chúng trong một hình ảnh).Chuyển đổi HH: MM: SS.mm thành giây trong bash

Cách dễ nhất để thực hiện việc này bằng bash là gì?

Trả lời

4

Giả sử bạn có thể chạy lệnh GNU date:

date +'%s' -d "01:43:38.123" 

Nếu kịch bản được tạo ra "mm: ss.mm" bạn sẽ cần phải thêm "00:" để bắt đầu, hoặc date sẽ từ chối nó.

Nếu bạn đang sử dụng hệ thống BSD (bao gồm Mac OS X), bạn cần chạy date -j +'%s' "0143.38" trừ khi bạn cài đặt ngày GNU với MacPorts hoặc Homebrew hoặc gì đó.

+0

Chỉ cần lưu ý rằng ngày sẽ chạy vấn đề nếu bạn đang cố gắng diễn giải các tiêu chuẩn như những người được nhìn thấy trong [GTFS] (https://developers.google.com/transit/gtfs/reference?hl=en#stop_timestxt), nơi thời gian có thể vượt quá 23 giờ. Ví dụ: 27:05:00 là hợp pháp. –

8
$ TZ=utc date -d '1970-01-01 1:43:38' +%s 
6218 
+2

Hoặc đặt múi giờ trong chuỗi ngày: “date -d '1970-01-01 1: 43: 38Z' +% s” –

6

Và nếu bạn muốn Bash tinh khiết bạn có thể làm một cái gì đó giống như

IFS=: read h m s <<<"${hms%.*}" 
seconds=$((10#$s+10#$m*60+10#$h*3600)) 

Các 10# phần là bắt buộc để xác định rằng những con số được đưa ra trong radix 10. Nếu không có điều này, bạn sẽ nhận được lỗi nếu h, m hoặc s08 hoặc 09 (khi Bash diễn giải các số có số 0 hàng đầu trong bát phân).

Các vấn đề liên quan