Python 3.8如何将负秒数转换为结构化时间?
处理Python中负时间戳的日期转换问题
你遇到的问题是因为time模块的localtime()函数在多数系统(尤其是Windows)中对1970年1月1日之前的时间戳支持有限,负时间戳会触发参数无效的错误。
改用datetime模块可以轻松解决这个问题,它对历史日期的兼容性更好。以下是修正后的代码:
from datetime import datetime, timezone secs = -238204800 # 先将时间戳转换为UTC datetime对象,再格式化为目标字符串 dt = datetime.fromtimestamp(secs, timezone.utc) print(dt.strftime("%Y:%m:%d %H:%M:%S"))
如果需要转换为本地时区而非UTC,也可以指定对应的时区(Python 3.9+可使用内置的zoneinfo,低版本可安装backports.zoneinfo),示例如下:
from datetime import datetime from zoneinfo import ZoneInfo secs = -238204800 dt = datetime.fromtimestamp(secs, ZoneInfo("Asia/Shanghai")) print(dt.strftime("%Y:%m:%d %H:%M:%S"))
另外,你的原代码还有一个小语法错误:print语句末尾少了一个右括号,修正后即使不换模块,在支持早期时间戳的系统(比如部分Linux)上也能运行,但还是推荐用datetime保证跨系统兼容性。
内容的提问来源于stack exchange,提问作者Eric H.
相关产品推荐
相关产品推荐

