【问题标题】:How to get python to display current time (eastern)如何让python显示当前时间(东部)
【发布时间】:2012-07-27 11:16:40
【问题描述】:

如何让 Python 显示东部时间?

我查看了 python 文档,但它很混乱。我正在使用 Python 3。

谢谢。

【问题讨论】:

标签: python datetime time


【解决方案1】:

如果您需要很多时区,并且需要正确处理夏令时的重复时间(即从午夜到凌晨 1 点发生的情况),则应该使用包 pytz

不过,对于一些简单的事情,创建自己的时区类很容易:

import datetime

class EST5EDT(datetime.tzinfo):

    def utcoffset(self, dt):
        return datetime.timedelta(hours=-5) + self.dst(dt)

    def dst(self, dt):
        d = datetime.datetime(dt.year, 3, 8)        #2nd Sunday in March
        self.dston = d + datetime.timedelta(days=6-d.weekday())
        d = datetime.datetime(dt.year, 11, 1)       #1st Sunday in Nov
        self.dstoff = d + datetime.timedelta(days=6-d.weekday())
        if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
            return datetime.timedelta(hours=1)
        else:
            return datetime.timedelta(0)

    def tzname(self, dt):
        return 'EST5EDT'

dt = datetime.datetime.now(tz=EST5EDT())

在这里,您使用抽象基类 datetime.tzinfo 创建一个 EST5EDT 类,它描述了“东部时区”的含义,即您的 UTC 偏移量(-5 小时)以及夏令时的时间效果(顺便说一句,3 月的第 2 个星期日和 11 月的第一个星期日)。

顺便说一句,上面的模板是从datetime 文档中提取的: http://docs.python.org/library/datetime.html

不确定您的意思是“让 Python 显示东部时间”,但使用上面最后一行中的 dt 对象:

    In [15]: print(dt)
2012-07-29 12:28:59.125975-04:00

    In [16]: print(dt.strftime('%Y-%m-%d %H:%M:%S'))
2012-07-29 12:28:59

    In [17]: print(dt.strftime('%H:%M:%S'))
12:28:59

    In [18]: print(dt.strftime('%s.%f'))  
1343579339.125975

【讨论】:

    【解决方案2】:

    Pytz 库应该很有用。使用下面的代码 Pytz (supports > 2.3) 可以根据东部时区获取时间。

    from datetime import datetime, timedelta
    from pytz import timezone
    
    eastern = timezone('US/Eastern')
    fmt = '%Y-%m-%d %H:%M:%S %Z%z'
    loc_dt = eastern.localize(datetime(2012, 10, 29, 6, 0, 0))
    print loc_dt.strftime(fmt)
    

    【讨论】:

    • 我似乎无法安装 pytz,它告诉我通过命令行安装,但我不知道如何安装。我尝试了自述文件所说的:c:\python32\python.exe setup.py install。但它说无效。
    • 您可能安装了错误的 pytz 版本。您可以尝试使用“easy_install --upgrade pytz”命令吗?您应该为此安装 setuptools。
    • 我认为 setuptools 不适合 Python 3,我只能找到 Python 2.x 的版本。
    • [link]pypi.python.org/pypi/distribute 你可以在python 3中使用distribute for setuptools。
    【解决方案3】:

    当然还有更直观的方法:

    from datetime import datetime
    from pytz import timezone
    tz = timezone('EST')
    datetime.now(tz) 
    ## this returns a datetime object pointing to right now 
    ## according to the timezone info object handed in as the tz variable. 
    

    或者,您可以定义自己的datetime 对象并将tz 传递为tzinfo,如下所示:

    datetime(2016, 3, 30, 11, 13, 24, tzinfo=tz)
    

    【讨论】:

    • 这正是我想要的。但是我运行了上述内容(此评论的日期,我在东海岸)。它显示以下内容(我猜这是夏令时问题): print datetime.now(tz) ---> Out[23]: datetime.datetime(2016, 4, 22, 12, 19, 20, 281778, tzinfo=) print datetime.now() ----- > Out[24]: datetime.datetime(2016, 4, 22, 13, 19, 58, 839327)
    • 使用 'US/Eastern' 而不是 'EST' 似乎可以解决这个问题
    • 不确定是什么导致了 38 分钟的偏移,但可能是您的本地系统有不同的时区集。如需列表,请查看stackoverflow.com/questions/13866926/…
    【解决方案4】:

    如果您需要整个时间戳:

    import datetime
    print (datetime.datetime.utcnow() - datetime.timedelta(hours=4))
    

    如果您只需要 YYYYmmdd 格式的日期

    print (datetime.datetime.utcnow() - datetime.timedelta(hours=4)).strftime('%Y%m%d')
    

    【讨论】:

    • 这错误地假设东部时区总是与 UTC 偏移 4 小时。
    【解决方案5】:

    如果由于某种原因您不能使用 pytz 模块并且需要简单的解决方案,那么您可以使用

    from datetime import datetime, timezone
    
    datetime.now(timezone(timedelta(hours=-5), 'EST'))
    

    【讨论】:

    • 在像 r/ProgrammerHumor 这样的地方有一个共同的比喻,即 SO 倾向于推广像 "Ackchyually, no one does it that way and it's easier on frameworks like this" 这样的答案,而正确的、被否决的答案是“oh, just use the builtin function”。这个问题的答案让我明白了为什么。 OP 发布了一个模糊的问题,足以汇集大量搜索结果,而人们提出模糊的编程问题的下意识反应是支持最普遍插入的东西,这必然包含额外的英国媒体报道软件。跨度>
    猜你喜欢
    • 2010-12-31
    • 2011-07-03
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多