2012-03-16 69 views
106

Tôi có tệp dữ liệu chứa dấu thời gian như "1331856000000". Rất tiếc, tôi không có nhiều tài liệu về định dạng, vì vậy tôi không chắc chắn về cách định dạng dấu thời gian. Tôi đã thử tiêu chuẩn của Python datetime.fromordinal()datetime.fromtimestamp() và một số khác, nhưng không có gì phù hợp. Tôi khá chắc chắn rằng số cụ thể tương ứng với ngày hiện tại (ví dụ: 2012-3-16), nhưng không nhiều hơn.Làm thế nào để chuyển đổi dấu thời gian nguyên sang ngày giờ của Python

Làm cách nào để chuyển đổi số này thành datetime?

Trả lời

193

datetime.datetime.fromtimestamp() là chính xác, ngoại trừ bạn có thể có dấu thời gian bằng mili giây (như trong JavaScript), nhưng fromtimestamp() hy vọng dấu thời gian Unix, tính bằng giây.

Làm điều đó như thế:

>>> import datetime 
>>> your_timestamp = 1331856000000 
>>> date = datetime.datetime.fromtimestamp(your_timestamp/1e3) 

và kết quả là:

>>> date 
datetime.datetime(2012, 3, 16, 1, 0) 

Liệu nó trả lời câu hỏi của bạn?

EDIT: J.F. Sebastian gợi ý một cách chính xác để sử dụng đúng bộ phận bởi 1e3 (float 1000). Sự khác biệt là đáng kể, nếu bạn muốn nhận được kết quả chính xác, do đó tôi đã thay đổi câu trả lời của mình. Sự khác biệt kết quả từ hành vi mặc định của Python 2.x, luôn trả về int khi chia (sử dụng toán tử /) int bởi int (điều này được gọi là phân chia tầng). Bằng cách thay thế số chia 1000 (là một int) với (đại diện là của 1000 như float) 1e3 ước hoặc với float(1000) (hoặc 1000. vv), bộ phận trở thành đúng bộ phận. Python 2.x trở float khi chia int bởi float, float bởi int, float bởi float vv Và khi có một số phần phân đoạn trong dấu thời gian trôi qua để fromtimestamp() phương pháp, kết quả của phương pháp này cũng chứa các thông tin về điều đó một phần phân đoạn (như số của micro giây).

+6

sử dụng phân chia thực sự: '/ 1e3' – jfs

+0

@ J.F.Sebastian: Bạn hoàn toàn chính xác, tôi đã chỉnh sửa câu trả lời của mình và thêm một số giải thích lý do bạn đúng. Nếu bạn không đồng ý với lời giải thích, vui lòng cho tôi biết. – Tadeck

+3

Tôi tìm thấy rõ ràng hơn để viết x * 0,001 thay vì x/1e3 –

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