如何在本地时区打印日期和时间?
如何在本地时区打印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的有效方法。用户可以根据自己的需求选择其中一种方法来实现。
如何在本地时区打印日期时间?
想必你应该看看: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
问题的出现原因是在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()
方法的行为进行解释。