如何在本地时区打印日期和时间?

13 浏览
0 Comments

如何在本地时区打印日期和时间?

假设我有一个变量t,它的值设置为:

datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=)

如果我使用str(t),我得到的结果是:

'2009-07-10 18:44:59.193982+00:00'

我该如何得到一个类似的字符串,但是以本地时区而不是UTC打印?

0
0 Comments

如何在本地时区打印datetime?

问题的出现原因是用户想要在本地时区打印datetime,但是不知道如何实现。解决方法是使用datetime.tzinfo文档中定义的LocalTimezone类。

代码示例:

from datetime import datetime, tzinfo
class LocalTimezone(tzinfo):
    def __init__(self, offset, name):
        self.offset = offset
        self.name = name
    def utcoffset(self, dt):
        return self.offset
    def tzname(self, dt):
        return self.name
    def dst(self, dt):
        return timedelta(0)
Local = LocalTimezone(offset, name) # replace offset and name with your local timezone offset and name
t = datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=utc)
local_t = t.astimezone(Local)
print(str(local_t))

运行以上代码将会打印出本地时区的datetime字符串,例如'2009-07-11 04:44:59.193982+10:00'(结果可能因本地时区不同而有所差异)。

需要注意的是,这种方法会打印当前生效的UTC偏移量,可能与给定的datetime实例的时间不同(由于夏令时的影响)。

另外,如果底层的time实现不使用历史时区数据库(例如Windows系统),LocalTimezone可能无法正确处理过去的日期。

另外一个实现方法是使用`datetime.datetime.now(tz=Local)`,这将打印当前时间的本地时区datetime。

总结起来,以上方法是解决如何在本地时区打印datetime的有效方法。用户可以根据自己的需求选择其中一种方法来实现。

0
0 Comments

如何在本地时区打印日期时间?

想必你应该看看:datetime.astimezone()

http://docs.python.org/library/datetime.html#datetime.datetime.astimezone

还可以查看pytz模块-使用起来非常简单-例如:

eastern = timezone('US/Eastern')

http://pytz.sourceforge.net/

示例:

from datetime import datetime
import pytz
from tzlocal import get_localzone
utc_dt = datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=pytz.utc)
print(utc_dt.astimezone(get_localzone())) # 打印本地时间
# -> 2009-07-10 14:44:59.193982-04:00

那么如何获取当前的本地时区?

不就是datetime.datetime(2009, 7, 10, 18, 44, 59, 193982)吗?

这个答案是错误的。我住在英国,US/Eastern不是本地时区。

- 不,因为结果对象不具有日期时间意识。你不知道自己处于哪个时区。

: tzlocal.get_localzone()可以获取到你的本地时区。

https://pypi.python.org/pypi/tzlocal

0
0 Comments

问题的出现原因是在Python 3.6及以上版本中,调用astimezone()方法时,如果没有传入时区对象,默认使用本地时区。这意味着不需要导入tzlocal模块,可以直接使用astimezone()方法来打印本地时区的日期时间。

解决方法如下:

from datetime import datetime, timezone
utc_dt = datetime.now(timezone.utc)
print("Local time {}".format(utc_dt.astimezone().isoformat()))

以上代码演示了使用astimezone()方法打印本地时区的几种方式。

此外,还可以使用tzlocal模块的get_localzone()方法来获取本地时区,具体代码如下:

from datetime import datetime, timezone
from tzlocal import get_localzone
utc_dt = datetime.now(timezone.utc)
# 使用astimezone()方法,不传入参数
print("Local time   {}".format(utc_dt.astimezone().isoformat()))
# 使用tzlocal模块的get_localzone()方法
print("Local time   {}".format(utc_dt.astimezone(get_localzone()).isoformat()))

另外,也可以使用pytz模块来创建一个特定的时区对象,然后使用astimezone()方法打印本地时区的日期时间,具体代码如下:

import pytz
from datetime import datetime, timezone
utc_dt = datetime.now(timezone.utc)
PST = pytz.timezone("US/Pacific")
EST = pytz.timezone("US/Eastern")
JST = pytz.timezone("Asia/Tokyo")
NZST = pytz.timezone("Pacific/Auckland")
print("Pacific time {}".format(utc_dt.astimezone(PST).isoformat()))
print("Eastern time {}".format(utc_dt.astimezone(EST).isoformat()))
print("UTC time     {}".format(utc_dt.isoformat()))
print("Japan time   {}".format(utc_dt.astimezone(JST).isoformat()))
# 使用astimezone()方法,不传入参数
print("Local time   {}".format(utc_dt.astimezone().isoformat()))
# 使用pytz模块创建时区对象
print("Local time   {}".format(utc_dt.astimezone(NZST).isoformat()))

以上代码输出如下:

Pacific time 2019-02-22T17:54:14.957299-08:00
Eastern time 2019-02-22T20:54:14.957299-05:00
UTC time     2019-02-23T01:54:14.957299+00:00
Japan time   2019-02-23T10:54:14.957299+09:00
Local time   2019-02-23T14:54:14.957299+13:00
Local time   2019-02-23T14:54:14.957299+13:00
Local time   2019-02-23T14:54:14.957299+13:00

这是最佳答案!顺便一提,Python 3.6支持astimezone()方法在没有传入时区对象时表示系统的本地时间。感谢对astimezone()方法的行为进行解释。

0