Python常用标准库及第三方库3-日期、时间处理模块

内容分享2小时前发布
0 1 0

今天分享下程序员必须搞定的日期时间处理那些事。

最近在开发订单系统时遇到了时间显示乱码的问题。项目后台返回时间戳1717024400,前台显示直接变成了“2024-06-01 15:26:40”。后来才清楚,这跟Python里time和datetime模块的功能区隔有关。实则只要记住几个核心函数就行。

列如获取当前时间戳用time.time(),返回的是浮点数。要把这个1680192000.0变成整数毫秒时间戳,记得用round(time.time() * 1000)。有次由于没处理小数点,支付接口直接报参数错误。

处理日期最好用datetime.datetime.now(),自带年月日时分秒字段。要是计算订单有效期,直接写datetime.now() + timedelta(days=3),比手动算天数方便多了。之前用纯time模块算跨年时间差,漏掉了闰年导致算法全部错乱。

Python常用标准库及第三方库3-日期、时间处理模块

最头疼的是不同时间格式转换。想把”2023-02-28″转成时间元组时,必须用datetime.strptime,像这样datetime.strptime(“2023-02-28”, “%Y-%m-%d”).date()。有次写成time模块的strptime,结果返回的是星期几数值而不是日期对象。

测试登录功能时发现,记录用户最后活跃时间应该用utcnow()保存服务器时间。用本地时间容易因服务器部署地点不同导致混乱。有同事搞错了,导致海外用户明明在线却显示已离线两小时。

目前用timeit模块测代码性能更高效了。列如比较两种列表生成方式耗时,可以写Timer('for i in range(1000):[x*x for x in i]','from __main__ import i')。记得调整number参数控制循环次数,太大会卡死IDE。

Python常用标准库及第三方库3-日期、时间处理模块

遇到最诡异的问题是格式化字符串写错。把”%Y”写成”YYYY”会导致年份显示成0000。还有一次把%H写成h小写,凌晨时间全显示成”15:00″这样的错误。

调试时间转换时,最好先打日志确认变量类型:用print(type(变量名))。要是变量变成str就不能直接加减日期了。上月就是由于把时间戳存成字符串,查询近7日订单时根本无法计算。

目前遇到时间问题,先看需求是否需要时区转换。国内项目一般用上海时区,但数据库表存储UTC时间更稳妥。上周给外贸系统加模块时,漏掉时区转换导致纽约客户看到的是北京时间。

Python常用标准库及第三方库3-日期、时间处理模块

处理历史数据时,老系统的时间字段可能是文本格式。这时候用datetime.strptime慢慢解析才行。有次直接用了pd.to_datetime,结果把”24/02/2023″当成了24号二月,害得数据对不上。

最后说个实用技巧:需要把时间戳转中文格式可以这么写:
current_time = time.strftime(“%Y年%m月%d日 %H:%M:%S”, time.localtime()).
开发聊天功能时这么改过时间显示,用户说看着比数字清晰多了。

© 版权声明

相关文章

1 条评论

  • 头像
    史蒂夫地产 读者

    python处理时间的确让人头痛

    无记录
    回复