获取指定时区的日期时间,与计算机中设置的日期时间无关

Posted

技术标签:

【中文标题】获取指定时区的日期时间,与计算机中设置的日期时间无关【英文标题】:Get datetime of specified timezone irrespective of datetime set in computer 【发布时间】:2021-06-04 23:08:03 【问题描述】:

我想打印时区"Asia/Kathmandu" 的日期时间。我使用了以下代码:

import datetime, pytz

tz = pytz.timezone("Asia/Kathmandu")
ktm_now = datetime.datetime.now(tz)
print(ktm_now)

问题是它给了我在我的计算机中设置的日期时间,而不是"Asia/Kathmandu" 的日期时间。现在"Asia/Kathmandu" 的日期时间应该是19:55:00,但我已经手动将我的计算机时间更改为21:30:00。在这样做之后,只要我运行上面的代码,它就会出人意料地给我日期时间,它是我的计算机 (21:30:00) 而不是 19:55:00。可能是什么原因?如何获取"Asia/Kathmandu"等指定时区的日期时间而不是计算机中设置的日期时间?

【问题讨论】:

如果你使用时间,它会给你什么?进口时间; t = time.localtime() @AdrienWehrlé 它给出了我电脑中设置的时间 加德满都和加德满都是两个时区,相差毫秒。我复制并运行了您的代码并检查了加德满都的谷歌时间。它工作正常。请再检查一次。 上面的代码对我来说很好用。另请注意,Python 根据您 PC 的日历和时钟计算日期和时间。如果你改变你的 PC 时间,那么 Python 的时间就会受到影响。 @SivaSankar 无论是加德满都还是加德满都,它仍然在给我电脑中设置的时间。也许您也可以更改计算机中的时间并使用您所在地区的时区尝试此代码 【参考方案1】:

这是一种从独立来源获取时间的方法(假设您可以访问互联网):

import datetime
import ntplib # pip install ntplib
import dateutil # Python 3.9: use zoneinfo

tz_info = dateutil.tz.gettz("Asia/Kathmandu")

ntp_server = 'pool.ntp.org'
c = ntplib.NTPClient()

response = c.request(ntp_server)
dt = datetime.datetime.fromtimestamp(response.tx_time, tz=tz_info)
# response.tx_time holds NTP server timestamp in seconds since the epoch / Unix time
# note that using response.tx_time here ignores network delay

print(dt)
# 2021-03-06 21:13:20.112861+05:45

print(repr(dt))
# datetime.datetime(2021, 3, 6, 21, 13, 20, 112861, tzinfo=tzfile('/usr/share/zoneinfo/Asia/Kathmandu'))

print(dt.utcoffset())
# 5:45:00

包:ntplib,背景信息:Network Time Protocol

【讨论】:

以上是关于获取指定时区的日期时间,与计算机中设置的日期时间无关的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储过程 MySql 中设置默认时区

如何找到松下EXIF中设置的时区

基于时区在 C# 中设置日期时间,例如 +08:00 [重复]

反序列化 JSON 日期无时区

iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法

如何在 Yaml 日期字符串中设置时区?