在Python中如何获取不受系统日期影响的真实当前日期
要获取不受本地系统日期影响的真实日期,必须通过网络从公共时间服务器拉取标准时间,本地内置的datetime相关API只会读取系统时间,无法实现该需求,具体实现方式如下:
方案1:通过NTP协议获取时间(推荐,精度高、稳定性好)
首先安装第三方NTP客户端库:pip install ntplib
使用示例代码:
import ntplib from datetime import datetime, timezone, timedelta ntp_client = ntplib.NTPClient() # 可替换为国内公共NTP服务器提升访问速度,比如ntp.aliyun.com、cn.pool.ntp.org response = ntp_client.request('pool.ntp.org', version=3, timeout=5) # 转换为东八区(北京时间)日期,可根据自身需求调整时区偏移 real_date = datetime.fromtimestamp(response.tx_time, tz=timezone.utc).astimezone(timezone(timedelta(hours=8))).date() print(real_date)
该方案为行业通用的时间同步方案,误差在毫秒级,资源消耗低,适合绝大多数场景
方案2:通过HTTP时间接口获取(可完全使用Python标准库实现)
如果不想安装任何第三方依赖,可以通过标准库请求公共时间接口实现:
from urllib import request import json from datetime import datetime, timezone, timedelta req = request.Request('http://worldtimeapi.org/api/timezone/Asia/Shanghai') with request.urlopen(req, timeout=5) as res: res_data = json.loads(res.read().decode('utf-8')) real_date = datetime.fromtimestamp(res_data['unixtime'], tz=timezone.utc).astimezone(timezone(timedelta(hours=8))).date() print(real_date)
该方案依赖公共接口的可用性,稳定性和精度低于NTP方案,适合临时测试场景使用
注意事项
- 两种方案都需要设备处于可联网状态
- 离线场景下要实现该需求,需要外接独立的硬件实时时钟(RTC)模块,从硬件层面读取不受系统影响的时间
内容的提问来源于stack exchange,提问作者shee
相关产品推荐
相关产品推荐

