JavaScript Date对象与Python datetime对象是否兼容?如何转换指定ISO日期?
JavaScript Date与Python datetime对象的兼容性及转换方法
当然兼容啦!你提到的2020-06-19T11:32:16.548109Z这种带时区的ISO 8601格式字符串,是两种语言都认可的标准日期格式,转换起来完全没问题,下面给你讲几种实用的方法:
1. 直接用JavaScript Date构造函数解析
这是最省心的方式,JavaScript的Date对象原生就支持解析这种格式的字符串——哪怕带微秒也没关系,虽然JS的Date对象只精确到毫秒,多余的微秒会被自动截断,但日常使用基本不受影响。
举个代码例子:
// 来自Python的datetime字符串 const pythonDatetimeStr = '2020-06-19T11:32:16.548109Z'; // 直接传入Date构造函数 const jsDate = new Date(pythonDatetimeStr); // 看看结果 console.log(jsDate); // 会根据你的本地时区输出对应的日期,比如我这边是Fri Jun 19 2020 19:32:16 GMT+0800 (中国标准时间) console.log(jsDate.toISOString()); // 可以转回标准格式:"2020-06-19T11:32:16.548Z"
2. 手动处理微秒(如果需要保留)
如果你有特殊需求,必须保留微秒信息(毕竟JS Date本身不存储微秒),可以手动从字符串里提取这部分内容单独存储:
const pythonDatetimeStr = '2020-06-19T11:32:16.548109Z'; // 拆分日期部分和微秒部分 const [datePart, microsecSection] = pythonDatetimeStr.split('.'); // 生成Date对象(其实直接用原字符串也可以,JS会自动处理) const jsDate = new Date(datePart + '.Z'); // 提取微秒部分(这里取后三位,前面的548是毫秒) const microseconds = microsecSection ? parseInt(microsecSection.slice(3, 6), 10) : 0; console.log('日期对象:', jsDate); console.log('微秒数:', microseconds); // 输出109
顺便说下反向转换(JS Date转Python datetime)
如果之后需要把JS的Date对象转回Python能识别的格式,直接用toISOString()方法生成标准字符串就行,Python端也能轻松解析:
JS端代码:
const jsDate = new Date(); // 生成ISO格式字符串 const isoDatetimeStr = jsDate.toISOString(); // 把这个字符串传给Python就行
Python端代码示例:
from datetime import datetime # 接收来自JS的ISO字符串 iso_str = "2020-06-19T11:32:16.548Z" # 处理Z时区,Python 3.11+的fromisoformat支持直接解析带Z的格式,低版本可以替换成+00:00 dt = datetime.fromisoformat(iso_str.replace('Z', '+00:00')) print(dt) # 输出2020-06-19 11:32:16.548000+00:00
内容的提问来源于stack exchange,提问作者Patrick Iradukunda
相关产品推荐
相关产品推荐

