Làm cách nào để tạo một datetime trong Python từ mili giây?


140

Tôi có thể tạo một đối tượng Date tương tự trong Java bằng java.util.Date (mili giây) . Làm cách nào để tạo so sánh trong Python?

Phân bổ một đối tượng Ngày và khởi tạo nó để biểu thị số mili giây đã chỉ định kể từ thời gian cơ sở tiêu chuẩn được gọi là "kỷ nguyên", cụ thể là ngày 1 tháng 1 năm 1970, 00:00:00 GMT.

Câu trả lời:


214

Chỉ cần chuyển đổi nó thành dấu thời gian

datetime.datetime.fromtimestamp(ms/1000.0)

17
Một lưu ý - trong Python 3, (/) sẽ thực hiện phép chia dấu phẩy động. Để thực hiện phép chia tích phân, sử dụng (//).
John Millikin

3
Bạn thực sự không muốn phân chia float? Nếu không, bạn sẽ mất bất kỳ độ chính xác nào dưới 1 giây (được giữ trong phần phân đoạn của dấu thời gian). Tốt hơn để sử dụng ms / 1000.0 mà không cắt ngắn.
Brian

4
Chắc chắn datetime luôn hỗ trợ nó mặc dù? Nếu chúng ta có độ chính xác dưới giây, việc ném nó đi có vẻ sai. Nếu chúng tôi không làm hại gì - chúng tôi chỉ giữ lại độ chính xác ban đầu đó.
Brian

30
Để giữ độ chính xác mà không cần sử dụng phao, bạn cũng có thể làm:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg

2
một vấn đề khác với giải pháp này: "fromtimestamp () có thể tăng ValueError, nếu dấu thời gian nằm ngoài phạm vi giá trị được hỗ trợ bởi các hàm C localtime () hoặc gmtime (). Điều này phổ biến trong điều này từ năm 1970 đến 2038. " - mã của bạn dự kiến ​​sẽ kéo dài bao lâu ???
mike gặm nhấm

12

Cái này thì sao? Tôi đoán nó có thể được tính vào để xử lý ngày trước năm 1970 và sau năm 2038.

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

như đã đề cập trong lib tiêu chuẩn Python:

fromtimestamp () có thể tăng ValueError, nếu dấu thời gian nằm ngoài phạm vi giá trị được hỗ trợ bởi các hàm localtime () hoặc gmtime () của nền tảng. Điều này là phổ biến cho điều này bị hạn chế trong nhiều năm từ 1970 đến 2038.


6
bạn có thể sử dụngutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs

9

Bit nặng vì sử dụng gấu trúc nhưng hoạt động:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.