2015-09-01 15 views
5

Tôi có tệp csv với ngày giờ ở định dạng unixtimestamp với mili giây và thông tin múi giờ tính bằng mili giây. Tôi muốn chuyển đổi điều này thành định dạng ngày giờ có thể sử dụng được hơn để xử lý tiếp. Ví dụ, thời gian là 1437323953822 và múi giờ là -14400000.Python: Làm thế nào để chuyển đổi unixtimestamp và múi giờ thành đối tượng datetime?

tôi có thể chuyển đổi các dấu thời gian vào một datetime bằng cách sử dụng

datetime.datetime.fromtimestamp(1437323953822/1000) 

Nhưng làm thế nào bây giờ tôi kết hợp các múi giờ đó là -4 UTC thời gian từ những gì tôi biết.

(-14400000/1000/60/60) = -4 

Làm cách nào để sử dụng múi giờ này để nhận thời gian thực tế?

+0

Khi bạn nói thời gian thực tế, ý của bạn là gì? Bạn đang tìm kiếm thời gian UTC? –

+0

Tôi muốn có giờ địa phương thực tế. – sfactor

+0

Bạn nên nhận đúng thời gian thực tế? Bạn có nhận được UTC thay thế không? –

Trả lời

1

fromtimestamp cũng có thể tận tham số khác cho múi giờ, một lớp con của tzinfo:

classmethod datetime.fromtimestamp(timestamp[, tz])

Return ngày địa phương và thời gian tương ứng với timestamp POSIX, như được trả về bởi time.time(). Nếu đối số tùy chọn tz là Không hoặc không được chỉ định, dấu thời gian được chuyển đổi thành ngày ngày giờ địa phương của nền tảng và đối tượng ngày giờ trả về là ngây thơ.

Khác tz phải là phiên bản của lớp học tzinfo phân lớp và dấu thời gian được chuyển đổi thành múi giờ của tz. Trong trường hợp này kết quả là tương đương với tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

0

fromtimestamp() đã trả theo giờ địa phương của bạn có nghĩa là bạn không cần phải đính kèm các utc bù đắp nếu fromtimestamp() xác định nó một cách chính xác tự động:

#!/usr/bin/env python 
from datetime import datetime 

local_time = datetime.fromtimestamp(1437323953822 * 1e-3) 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

fromtimestamp() có thể thất bại trong một số trường hợp, ví dụ: nếu múi giờ địa phương có chênh lệch utc khác nhau trong quá khứ và fromtimestamp() không sử dụng cơ sở dữ liệu múi giờ lịch sử trên nền tảng cụ thể (đáng chú ý là Windows). Trong trường hợp đó, xây dựng theo giờ địa phương một cách rõ ràng theo thời utc và utc được bù đắp:

#!/usr/bin/env python 
from datetime import datetime, timedelta 

utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=1437323953822) 
utc_offset = timedelta(milliseconds=-14400000) 
local_time = utc_time + utc_offset 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

Python always expects POSIX Epoch và do đó nó là ok để hardcode nó. Công thức rõ ràng có thể chính xác hơn (không có lỗi làm tròn) và nó có thể chấp nhận một dải thời gian đầu vào rộng hơn (phạm vi fromtimestamp() phụ thuộc vào nền tảng và có thể hẹp hơn phạm vi datetime tương ứng).

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