【问题标题】:Display timezone name in formatted datetime string以格式化的日期时间字符串显示时区名称
【发布时间】:2019-04-09 11:25:28
【问题描述】:

我想为本地机器打印当前日期和时间以及时区名称。但是,我似乎无法得到最后一点

In [1]: from datetime import datetime

In [2]: print(datetime.now().strftime('%d %b %Y %H:%M:%S'))
09 Apr 2019 13:23:47

In [3]: print(datetime.now().strftime('%d %b %Y %H:%M:%S %Z'))
09 Apr 2019 13:23:52

我本来希望看到我的 PC 的时区名称 ('CET') 添加到第二个字符串中。我如何获得:

09 Apr 2019 13:23:52 CET

【问题讨论】:

    标签: python datetime


    【解决方案1】:

    基本上,如果您想要系统的时区信息,请使用 time 库。

    >>> import time
    >>> time.tzname
    ('IST', 'IST')
    

    就我而言,时区是IST

    更新 如果您只想使用 datetime 模块,有一种 hacky 方式,但绝对不推荐。这个answer 中提到了解决方案。但问题又是,它不是完整的证明,假设您在印度和斯里兰卡等 2 个国家有相同的时区差异,那么它将无法识别正确的一个,因为 IST 和 SLST 都是 GMT+5:30

    【讨论】:

    • 那么只有datetime模块没有解决方案?
    • 基本上只有一种方法,但不是直截了当的。您需要找到UTC时间和本地时间之间的差异,然后您需要将差异映射到时区,因此您可以这样做,但是这种解决方案的问题是您无法区分时区何时相同适用于 2 个国家/地区,例如印度和斯里兰卡。
    【解决方案2】:

    那是因为datetime.now 的默认tz 参数是None

    如何指定时区的示例:

    from pytz import UTC
    datetime.now(tz=UTC).strftime("%Z")
    

    UTC

    如果您想获取当前时区,那么:

    import time
    time.strftime("%Z", time.gmtime())
    

    在我的例子中是GMT

    【讨论】:

    • 对,但我不想指定时区。我想打印计算机的当前时区,不管是什么。
    猜你喜欢
    • 2022-01-04
    • 2023-03-14
    • 2021-08-12
    • 2012-08-06
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多