Python2中通过datetime获取UTC时间ISO格式
一个热点统计需求,需要限定一个时间范围,计算出该范围内的热点事件,相关数据则以UTC标准时间的ISO时间格式存在mongodb中,和服务器设置的时区UTC+8并不一致。
为了解决这个问题,直觉反应是在python中将时区改为UTC时区,然而改变整个服务的时区设置却可能会影响其他逻辑,此种更改最好是能限定在热点逻辑的这个范围内。
也可以在使用datetime类的时候指定时区信息,这样也可以获得UTC时间,如下为默认时区和指定UTC的输出结果,差了8个小时(北京时间UTC+8)
>>> datetime.datetime.now()
datetime.datetime(2017, 9, 18, 0, 28, 50, 666364)
>>> utc_tz = pytz.timezone('UTC')
>>> datetime.datetime.now(tz=utc_tz)
datetime.datetime(2017, 9, 17, 16, 28, 54, 535585, tzinfo=<UTC>)
要获取ISO格式的时间则可以调用datetime类中的isoformat函数:
>>> datetime.datetime.now().isoformat() '2017-09-18T00:30:50.587223' >>> datetime.datetime.now(tz=utc_tz).isoformat() '2017-09-17T16:30:58.410670+00:00'
这样也可以实现生成UTC时间的ISO格式功能,但是略显麻烦,help(datetime.datetime)查看发现已经有定义好的utc相关函数可以用了,utcnow函数就可以获得当前的utc标准时间:
>>> datetime.datetime.utcnow() datetime.datetime(2017, 9, 17, 16, 40, 18, 683716) >>> datetime.datetime.utcnow().isoformat() '2017-09-17T16:41:06.418447'
要限定时间范围,则可以通过datetime.timedelta类获得一个按天、秒或毫秒计数的时间区间,然后和当前时间相减即可得出起始时间了,例如起始时间为当前时间往前10天10秒0毫秒:
>>> td = datetime.timedelta(days=10,seconds=10,microseconds=0) >>> td datetime.timedelta(10, 10) >>> datetime.datetime.utcnow().isoformat() '2017-09-17T16:52:04.020059' >>> (datetime.datetime.utcnow() - td).isoformat() '2017-09-07T16:51:54.525088'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?