2013-08-22 49 views
6

Tôi có một chương trình (sar command line utility) xuất ra các dòng của nó với cột thời gian. Tôi phân tích cú pháp tệp này bằng tập lệnh python của tôi và tôi muốn chuyển đổi 02:31:33 PM của sar thành epochs, ví dụ: 1377181906 (năm, tháng và ngày hiện tại với giờ, phút và giây từ chuỗi trên). Làm thế nào điều này có thể thực hiện theo một cách ít cồng kềnh? Tôi đã cố gắng làm điều này một mình, nhưng bị mắc kẹt với thời gian/datetime và đàn của các phương pháp của họ.Làm cách nào để chuyển đổi chuỗi HH: MM: SS thành thời gian thời gian UNIX?

+0

http://stackoverflow.com/questions/466345/converting-string-into-datetime – Doon

+0

Không hoàn toàn lừa đảo e, vì tôi không có năm/ngày/tháng. Tôi ** có thể ** sử dụng 'strptime' nhưng nó sẽ khởi tạo các giá trị còn thiếu vào 1 tháng 1 năm 1900. Tôi có thể lấy các giá trị bị thiếu bởi chính mình và nối chúng vào chuỗi, nhưng điều này nằm trong thể loại * rườm rà *. –

+0

có, do đó lý do tôi đã không đánh dấu nó là dupe/vote để đóng. Strptime là cách tôi sẽ làm điều đó (tôi chỉ cần đặt ngày/giờ cho đến bây giờ, và sau đó phân tích cú pháp giống như @alecxe đang làm .. – Doon

Trả lời

8

Dưới đây là một cách để làm điều đó:

  • đọc chuỗi thành datetime sử dụng strptime
  • bộ năm, tháng, ngày của đối tượng datetime sang năm, tháng ngày hiện tại và ngày qua replace
  • chuyển đổi datetime thành dấu thời gian unix qua calendar.timegm

>>> from datetime import datetime 
>>> import calendar 
>>> dt = datetime.strptime("02:31:33 PM", "%I:%M:%S %p") 
>>> dt_now = datetime.now() 
>>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day) 
>>> calendar.timegm(dt.utctimetuple()) 
1377138693 

Lưu ý rằng trong python> = 3.3, bạn có thể lấy dấu thời gian từ một ngày giờ bằng cách gọi dt.timestamp().

Xem thêm:

2

Một cách khác để có thời gian kỷ nguyên là sử dụng mktime từ mô-đun thời gian và vượt qua thời gian tuple trong ngày, vì vậy bạn có thể làm điều này:

>>> from datetime import datetime 
>>> from time import mktime 
>>> dt = datetime.strptime("02:31:33 PM", "%H:%M:%S %p") 
>>> dt_now = datetime.now() 
>>> dt = dt.replace(year=dt_now.year, month=dt_now.month, day=dt_now.day) 
>>> int(mktime(dt.timetuple())) 
1377131493 
Các vấn đề liên quan