2009-07-10 38 views

Trả lời

10

Xem mô-đun Python Time.

from time import gmtime, strftime 
print strftime("%z", gmtime()) 

chuẩn Thái Bình Dương Thời gian

+0

chúng tôi đang xem các tài liệu khác nhau hay là ''% Z''? – SilentGhost

+0

@ SilentGhost: "% z" và '% z' giống hệt nhau trong Python. – ahawker

+11

có, nhưng ** chữ hoa ** z Z' và ** chữ thường ** 'z' thì không. – SilentGhost

60

Nên hoạt động:

import time 
time.tzname 

nó trả về một tuple của hai chuỗi: đầu tiên là tên của các địa phương múi giờ phi DST, thứ hai là tên của múi giờ DST địa phương.

+19

Để thực hiện điều này thêm nữa, bạn có thể sử dụng 'time.tzname [time.daylight]' để lấy tên của múi giờ hiện tại, chiếm thời gian tiết kiệm ánh sáng ban ngày. –

+9

Một lần nữa, 'time.daylight' không chỉ ra rằng DST đang hoạt động. Nó chỉ cho biết DST có được theo múi giờ hay không. Bạn đang tìm 'time.localtime(). Tm_isdst'. – marr75

+0

Chỉ cần thêm cho người dùng Windows, các giá trị cho múi giờ đã được xác định trong 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Múi giờ \' – swdev

4

Nếu bạn thích UTC offsets qua chuỗi:

time.timezone/-(60*60) 
+4

Điều này sẽ tính toán sai khi (/ nếu) DST có hiệu lực. – marr75

20

Cung cấp cho một UTC bù đắp như trong câu trả lời ThomasH, nhưng mất tiền tiết kiệm ánh sáng ban ngày vào tài khoản.

>>> import time 
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone 
>>> offset/60/60 * -1 
-9 

Giá trị của time.timezone hoặc time.altzone là trong vài giây Tây UTC (với các khu vực phía Đông của UTC nhận được một giá trị âm). Điều này trái ngược với cách chúng tôi thực sự thích nó, vì thế * -1.

time.localtime().tm_isdst sẽ bằng không nếu tiết kiệm ánh sáng ban ngày hiện không có hiệu lực (mặc dù điều này có thể không đúng nếu gần đây đã thay đổi luật tiết kiệm ánh sáng ban ngày).

CHỈNH SỬA: marr75 là chính xác, tôi đã chỉnh sửa câu trả lời cho phù hợp.

+1

Để an toàn, tôi nghĩ rằng việc kiểm tra bù đắp nên được đảo ngược (altzone nếu dst = 1 else timezone). Nếu tình trạng DST bằng cách nào đó không rõ, 'tm_isdst' sẽ là' -1', và mã hiện tại sẽ mặc định là 'altzone' trong trường hợp này. Đối với các vùng không sử dụng DST, giá trị này không bao giờ chính xác, do đó, 'múi giờ' có thể là dự phòng. (Tôi không chắc chắn nếu '-1' thực sự là có thể xuất ra từ' localtime' mặc dù) – nmclean

+1

[tất cả các vùng, giải pháp dựa trên múi giờ có thể thất bại trong một số trường hợp cạnh] (http://bugs.python.org/issue1647654) – jfs

11

Đoạn mã để tính toán bù trừ không đúng, xem http://bugs.python.org/issue7229.

Các cách chính xác để xử lý này là:

def local_time_offset(t=None): 
    """Return offset of local zone from GMT, either at present or at time t.""" 
    # python2.3 localtime() can't take None 
    if t is None: 
     t = time.time() 

    if time.localtime(t).tm_isdst and time.daylight: 
     return -time.altzone 
    else: 
     return -time.timezone 

Đây là trong tất cả các khả năng, không phải là câu hỏi chính xác mà OP hỏi, nhưng có hai đoạn không chính xác trên trang và thời gian lỗi bú theo dõi và sửa chữa.

+0

1. nếu bạn biết 'tm_isdst'; bạn không cần phải kiểm tra 'daylight' 2. [tất cả' altzone', 'giải pháp dựa trên timezone' có thể thất bại trong một số trường hợp cạnh] (http://bugs.python.org/issue1647654) – jfs

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