2010-11-01 46 views
11

Tôi đang có thời gian khó khăn nhất để có được thời gian hiện tại trong múi giờ EDT.Python - datetime của một múi giờ cụ thể

print datetime.time(datetime.now()).strftime("%H%M%S") 

datetime.now ([tz]) có một cuộc tranh cãi tz không bắt buộc, nhưng nó phải là kiểu datetime.tzinfo ... Tôi có không ben có thể tìm ra cách để xác định một đối tượng tzinfo cho Đông múi giờ ... Có vẻ như nó nên được khá đơn giản, nhưng tôi không thể tìm ra nó mà không cần nhập một thư viện bổ sung.

Trả lời

20

Tôi không nói nhiều về múi giờ EDT nhưng ví dụ này sẽ phục vụ mục đích của bạn.

import datetime 

datetime.datetime.now phải được chuyển thông tin múi giờ phải là loại datetime.tzinfo. Đây là một lớp thực hiện điều đó với một số hàm được yêu cầu. Tôi không cung cấp chi tiết tiết kiệm ánh sáng ban ngày ở đây vì đây là một ví dụ.

class EST(datetime.tzinfo): 
    def utcoffset(self, dt): 
     return datetime.timedelta(hours=-5) 

    def dst(self, dt): 
     return datetime.timedelta(0) 

Bây giờ bạn có thể sử dụng này để có được những thông tin với múi giờ đúng đắn:

print datetime.datetime.now(EST()) 

Output:

2010-11-01 13:44:20.231259-05:00 
+0

cảm ơn - bực bội bạn phải tạo cả lớp để chỉ định múi giờ (so với chỉ chuyển một biến đơn giản) – wuntee

+0

@wuntee: Đó không phải là sự thật. Điều này có nghĩa là một lời giải thích. Câu trả lời của adw chứa thư viện - pytz có thể được sử dụng để truyền thông tin tzinfo. Nó thực tế sẽ được tái sử dụng và các khía cạnh như dst vv đã được cung cấp bởi module pytz. – pyfunc

8

Lớp tzinfo chỉ định nghĩa một giao diện, bạn sẽ cần phải thực hiện nó cho mình (xem tài liệu cho một ví dụ) hoặc sử dụng một mô-đun bên thứ ba mà thực hiện nó, như pytz.

Chỉnh sửa: Rất tiếc, tôi đã bỏ lỡ rằng bạn không muốn nhập thư viện khác.

+0

+1 để cung cấp mô-đun pytz khi tôi tập trung giải thích tzinfo. – pyfunc

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