How to get the common name for a pytz timezone eg. EST/EDT for America/New_York

后端 未结 4 1730
梦谈多话
梦谈多话 2020-12-09 14:40

Given a pytz timezone for a particular user(calculated from his offset), i want to display the common name for that timezone. I\'m assuming people are more accustomed to see

相关标签:
4条回答
  • 2020-12-09 15:09

    Given a pytz timezone for a particular user(calculated from his offset), i want to display the common name for that timezone. I'm assuming people are more accustomed to seeing EST or PST instead of spelled out like America/NewYork.

    If you need this derived from a datetime object localized with pytz...

    >>> import pytz as tz
    >>> from datetime import datetime as dt
    >>> CT = tz.timezone('America/Chicago')
    >>>
    >>> summer_day = dt(2010, 7, 4, 0, 1, 1)
    >>> bar = CT.localize(summer_day, is_dst=None)
    >>> bar.tzname()
    'CDT'
    >>>
    >>> christmas = dt(2010, 12, 25, 0, 1, 1)
    >>> foo = CT.localize(christmas, is_dst=None)
    >>> foo.tzname()
    'CST'
    >>> 
    
    0 讨论(0)
  • 2020-12-09 15:18

    This may not have been around when this question was originally written, but here is a snippet to get the time zone official designation:

    >>> eastern = timezone('US/Eastern')
    >>> eastern.zone
    'US/Eastern'
    

    Further, this can be used with a non-naive datetime object (aka a datetime where the actual timezone has been set using pytz.<timezone>.localize(<datetime_object>) or datetime_object.astimezone(pytz.<timezone>) as follows:

    >>> import datetime, pytz
    >>> todaynow = datetime.datetime.now(tz=pytz.timezone('US/Hawaii'))
    >>> todaynow.tzinfo # turned into a string, it can be split/parsed
    <DstTzInfo 'US/Hawaii' HST-1 day, 14:00:00 STD>
    >>> todaynow.strftime("%Z")
    'HST'
    >>> todaynow.tzinfo.zone
    'US/Hawaii'
    

    This is, of course, for the edification of those search engine users who landed here. ... See more at the pytz module site.

    0 讨论(0)
  • 2020-12-09 15:19

    You can use the tzname() method of tzinfo instances:

    >>> tz = timezone('America/St_Johns')
    >>> normal = datetime(2009, 9, 1)
    >>> tz.tzname(normal, is_dst=False)
    'NDT'
    
    0 讨论(0)
  • 2020-12-09 15:32

    If you are looking for the abbreviations then there are a few ways that come to mind.

    First would be:

    >>> from pytz import timezone
    >>> eastern = timezone('US/Eastern')
    >>> eastern._tzname
    'EST'
    

    Although since that references a property with the preceding single underscore it may be considered private and might not be the best place to grab it. The other would be from a localized datetime object.

    >>> from datetime import datetime
    >>> loc_dt = eastern.localize(datetime.now())
    >>> loc_dt.strftime('%Z')
    'EST'
    
    0 讨论(0)
提交回复
热议问题