Trong một dự án Python mà tôi đang thực hiện, tôi muốn có thể có được một tên múi giờ "có thể đọc được" của mẫu Mỹ/new_york, tương ứng với hệ thống timezone địa phương, để hiển thị cho người dùng. Mỗi đoạn mã tôi đã thấy truy cập thông tin múi giờ chỉ trả về một phần bù số [-0400] hoặc mã chữ cái [EDT] hoặc đôi khi cả hai. Có một số thư viện Python có thể truy cập thông tin này, hoặc nếu không, hãy chuyển đổi mã bù/chữ cái thành một tên có thể đọc được của con người?America/New_York, corresponding to the system local timezone, to display to the user. Every piece of code I've seen that accesses timezone information only returns either a numeric offset [-0400] or a letter code [EDT] or sometimes both. Is there some Python library that can access this information, or if not that, convert the offset/letter code into a human-readable name?
Nếu có nhiều hơn một tên có thể đọc được của con người tương ứng với một múi giờ cụ thể, hoặc là danh sách các kết quả có thể hoặc bất kỳ một trong số đó là tốt và nếu không có tên có thể đọc được của con người tương ứng với múi giờ hiện tại, tôi sẽ lấy hoặc là một ngoại lệ hoặc None
hoặc []
hoặc bất cứ điều gì.
Làm rõ: Tôi không nhớ chính xác những gì tôi đã nghĩ đến khi ban đầu tôi viết câu hỏi này, nhưng tôi nghĩ những gì tôi thực sự muốn là một cách để biến một múi giờ thành một cái tên có thể đọc được của con người. Tôi không nghĩ rằng câu hỏi này có ý nghĩa tập trung vào làm thế nào để có được hệ thống timezone địa phương một cách cụ thể, nhưng đối với trường hợp sử dụng cụ thể mà tôi có trong tâm trí, điều đó đã xảy ra rằng timezone địa phương là vấn đề tôi muốn. Tôi không chỉnh sửa một chút về timezone địa phương ra khỏi câu hỏi vì có những câu trả lời tập trung vào cả hai khía cạnh.
Hỏi ngày 15 tháng 8 năm 2010 lúc 20:47Aug 15, 2010 at 20:47
David Zdavid zDavid Z
125K26 Huy hiệu vàng249 Huy hiệu bạc275 Huy hiệu Đồng26 gold badges249 silver badges275 bronze badges
1
Sau đây tạo ra một lần giảm thời gian ánh xạ DefaultDICT [ví dụ: '-0400'] và chữ viết tắt [ví dụ: 'EDT'] cho các tên múi giờ địa lý phổ biến [ví dụ: 'America/new_york'].
import os
import dateutil.tz as dtz
import pytz
import datetime as dt
import collections
result = collections.defaultdict[list]
for name in pytz.common_timezones:
timezone = dtz.gettz[name]
now = dt.datetime.now[timezone]
offset = now.strftime['%z']
abbrev = now.strftime['%Z']
result[offset].append[name]
result[abbrev].append[name]
for k, v in result.items[]:
print[k, v]
Lưu ý rằng các chữ viết tắt thời gian có thể có ý nghĩa rất khác nhau. Ví dụ, 'EST' có thể đứng cho thời gian mùa hè phương Đông [UTC+10] ở Úc hoặc Giờ chuẩn phương Đông [UTC-5] ở Bắc Mỹ.
Ngoài ra, các phạm vi và chữ viết tắt có thể thay đổi đối với các khu vực sử dụng thời gian tiêu chuẩn ánh sáng ban ngày. Vì vậy, tiết kiệm cho dict tĩnh có thể không cung cấp tên múi giờ chính xác 365 ngày một năm.
Jayrizzo
2.8023 huy hiệu vàng31 Huy hiệu bạc42 Huy hiệu đồng3 gold badges31 silver badges42 bronze badges
Đã trả lời ngày 16 tháng 8 năm 2010 lúc 12:47Aug 16, 2010 at 12:47
UnutbuUnutbuunutbu
804K173 Huy hiệu vàng1728 Huy hiệu bạc1628 Huy hiệu đồng173 gold badges1728 silver badges1628 bronze badges
1
Tôi muốn có thể có được một tên múi giờ "có thể đọc được" của mẫu Mỹ/new_york, tương ứng với hệ thống timezone cục bộ, để hiển thị cho người dùng.
Có mô -đun
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
0 trả về đối tượng #!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
1 TZINFO [trước phiên bản #!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
2] tương ứng với hệ thống timezone cục bộ của hệ thống:#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
Để trả lời câu hỏi trong tiêu đề [cho những người từ Google], bạn có thể sử dụng
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
3 để in thông tin múi giờ địa phương:#!/usr/bin/env python
import time
print[time.strftime['%Z%z']]
# Example Results:
# -> MSK+0300
# -> CDT-0500
Nó in dấu chữ theo thời gian hiện tại và độ lệch UTC tương ứng với múi giờ địa phương của bạn.
Jayrizzo
2.8023 huy hiệu vàng31 Huy hiệu bạc42 Huy hiệu đồng3 gold badges31 silver badges42 bronze badges
Đã trả lời ngày 16 tháng 8 năm 2010 lúc 12:47Jan 29, 2016 at 14:14
UnutbuUnutbujfs
804K173 Huy hiệu vàng1728 Huy hiệu bạc1628 Huy hiệu đồng183 gold badges949 silver badges1624 bronze badges
3
Tôi muốn có thể có được một tên múi giờ "có thể đọc được" của mẫu Mỹ/new_york, tương ứng với hệ thống timezone cục bộ, để hiển thị cho người dùng.
Có mô -đun
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
0 trả về đối tượng #!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
1 TZINFO [trước phiên bản #!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
2] tương ứng với hệ thống timezone cục bộ của hệ thống:Aug 15, 2010 at 20:54
Để trả lời câu hỏi trong tiêu đề [cho những người từ Google], bạn có thể sử dụng
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
3 để in thông tin múi giờ địa phương:AmberNó in dấu chữ theo thời gian hiện tại và độ lệch UTC tương ứng với múi giờ địa phương của bạn.81 gold badges618 silver badges546 bronze badges
4
Đã trả lời ngày 29 tháng 1 năm 2016 lúc 14:14
>>> eastern = timezone['US/Eastern']
>>> eastern.zone
'US/Eastern'
JFSJFS
>>> import datetime, pytz
>>> todaynow = datetime.datetime.now[tz=pytz.timezone['US/Hawaii']]
>>> todaynow.tzinfo # turned into a string, it can be split/parsed
>>> todaynow.strftime["%Z"]
'HST'
>>> todaynow.tzinfo.zone
'US/Hawaii'
385K183 Huy hiệu vàng949 Huy hiệu bạc1624 Huy hiệu đồng
//pytz.sourceforge.net/ có thể giúp đỡ. Nếu không có gì khác, bạn có thể lấy một danh sách tất cả các múi giờ và sau đó lặp lại cho đến khi bạn tìm thấy một bản phù hợp với phần bù của bạn.Oct 30, 2019 at 20:41
Đã trả lời ngày 15 tháng 8 năm 2010 lúc 20:54ingyhere
Amberamber3 gold badges37 silver badges47 bronze badges
1
491K81 Huy hiệu vàng618 Huy hiệu bạc546 Huy hiệu đồng
import os
import os.path
import sys
def main[argv]:
tzname = os.environ.get['TZ']
if tzname:
print tzname
elif os.path.exists['/etc/timezone']:
print file['/etc/timezone'].read[]
else:
sys.exit[1]
if __name__ == '__main__':
main[sys.argv]
Điều này có thể không xuất hiện khi câu hỏi này được viết ban đầu, nhưng đây là một đoạn trích để có được chỉ định chính thức múi giờ:
Hơn nữa, điều này có thể được sử dụng với một đối tượng DateTime không có lỗi [hay còn gọi là DateTime trong đó thời gian thực tế đã được đặt bằng cách sử dụng
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
4 hoặc #!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
5 như sau:Jul 30, 2012 at 4:20
Tất nhiên, đây là sự sửa đổi của những người dùng công cụ tìm kiếm đã hạ cánh ở đây. ... Xem thêm tại trang web mô -đun PYTZ.poolie
Đã trả lời ngày 30 tháng 10 năm 2019 lúc 20:411 gold badge46 silver badges73 bronze badges
ingyhereingyhere
py> from dateutil.tz import *
py> ny = gettz['America/New York']
py> ny._filename
'/usr/share/zoneinfo/America/New_York'
py> ny._filename.split['/', 4][-1]
'America/New_York'
Huy hiệu vàng 11K337 Huy hiệu bạc47 Huy hiệu đồngAug 16, 2010 at 0:53
2
Nếu bạn chỉ muốn theo nghĩa đen những gì bạn yêu cầu, "Tên múi giờ của mẫu Mỹ/new_york, tương ứng với hệ thống timezone địa phương" và nếu bạn chỉ quan tâm đến Linux [và tương tự], thì điều này sẽ làm công việc:
from tzlocal import get_localzone
current_timezone = get_localzone[]
zone = current_timezone.zone
print[zone]
Tất nhiên sẽ tốt hơn nếu có một thư viện gói gọn điều này theo cách sạch hơn và có lẽ xử lý các trường hợp khác mà bạn đề cập trong các bình luận như đã có đối tượng
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
# display "human-readable" name [tzid]
print[tzlocal.get_localzone_name[]]
# Example Results:
# -> Europe/Moscow
# -> America/Chicago
6. Tôi nghĩ bạn có thể làm điều đó với Pytz được Amber đề cập nhưng không rõ ràng với tôi như thế nào ...Feb 6, 2020 at 13:23
Đã trả lời ngày 30 tháng 7 năm 2012 lúc 4:20
PooliepoolieFeb 18 at 17:32
2