gpt4 book ai didi

python - 从时区和 UTC 时间,获取该时间点与本地时间的秒数差异

转载 作者:行者123 更新时间:2023-11-28 20:08:45 25 4
gpt4 key购买 nike

这应该很简单,但我在 Python 中不太明白。我想要一个带有两个参数的函数,一个以秒为单位的 UTC 时间和一个 zoneinfo name例如“欧洲/维也纳”,并返回该时间点与本地时间和 UTC 的偏移量(以秒为单位)。

在 C 中它是:

/* ... code to to set local time to the time zone I want to compare against,
not shown here. Then call function below to get difference vs localtime.
Hardly an ideal solution,
but just to demonstrate what I want in a "lingua franca" (C): */


int get_diff_vs_localtime(const time_t original_utc_time)
{
struct tm* ts;

ts = localtime(&original_utc_time);

return mktime(ts) - original_utc_time;
}

我想我的问题真的可以归结为:“给定一个 Olson timezone(例如“欧洲/斯德哥尔摩”)和一个 UTC 时间,本地时间是几点?

最佳答案

假设“以秒为单位的 UTC 时间”表示 POSIX 时间戳。将其转换为斯德哥尔摩时间:

from datetime import datetime
import pytz

tz = pytz.timezone('Europe/Stockholm')

utc_dt = datetime.utcfromtimestamp(posix_timestamp).replace(tzinfo=pytz.utc)
dt = tz.normalize(utc_dt.astimezone(tz))
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

tz.normalize() 如果源时区是 UTC(就像在这种情况下)是不必要的。

一个更简单的替代方法是使用 fromtimestamp()tz 参数,将“自纪元以来的秒数”转换为本地时间:

from datetime import datetime
import pytz

tz = pytz.timezone('Europe/Stockholm')

dt = datetime.fromtimestamp(posix_timestamp, tz)
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

两个例子产生相同的结果。

如果本地机器使用“正确的”时区然后将从外部源接收的 POSIX 时间戳转换为 UTC,则可以使用显式公式:

from datetime import datetime, timedelta
import pytz

utc_dt = datetime(1970, 1, 1, tzinfo=pytz.utc) + timedelta(seconds=posix_timestamp)

最新的公式可能还支持更大的日期范围(1970 年之前、2038 年之后或 3000 年之后的日期不太可能出现问题)。

如果时间戳来自本地“正确”源,则应改用前两个示例(它们调用“正确”time.gmtime())。

关于python - 从时区和 UTC 时间,获取该时间点与本地时间的秒数差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com