因为我们每个月都要播报,就写了一个自动化程序,部署到docker上,没有Mount /etc/localtime
的情况下,时间是UTC,所以我想到在代码里时区限死BJS也就是UTC+8,一个比较简单的知识点记录一下。
时区获取
用到的Python标准库datetime库timezone类。
datetime.timezone(offset, name=None)
这个构造函数允许你定义一个特定的时区,其中offset参数表示与协调世界时(UTC)的偏移量,而 name
参数可选,用于为时区指定一个名称。
offset
参数必须指定为一个 timedelta
对象,表示本地时间与 UTC
的时差。 它必须严格限制于 timedelta(hours=-24)
和 timedelta(hours=24)
之间,否则会引发 ValueError
。
name
参数是可选的。 如果指定则必须为一个字符串,它将被用作 datetime.tzname()
方法的返回值。
例:
from datetime import datetime, timezone, timedelta
# 创建一个时区对象,表示UTC+8
custom_timezone = timezone(timedelta(hours=8), name='Asia/Shanghai')
# 创建一个带有时区信息的日期时间对象
dt_with_custom_timezone = datetime(2023, 1, 1, 12, 0, 0, tzinfo=custom_timezone)
# 打印结果
print(f"日期时间对象 {dt_with_custom_timezone} 所处时区:{custom_timezone}")
输出:日期时间对象 2023-01-01 12:00:00+08:00 所处时区:Asia/Shanghai
引用:https://blog.csdn.net/m0_73608980/article/details/135271944
now时间改造
timezone
类,一般会用于当作参数传入,常用datetime.now()
会以当前服务器时间来计算。
可以直接传入timezone
。
例
from datetime import datetime, timedelta, timezone
tz = timezone(timedelta(hours=8))
now = datetime.now(tz)
tomorrow = now + timedelta(days=1)
yesterday = now + timedelta(days=-1)
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
评论