You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python datetime模块如何使用毫秒而非微秒处理指定日期格式

核心结论

DateTime类型本身的内部存储以时间戳/刻度值的形式保存时间,不会区分毫秒、微秒的展示格式。你观测到的2021-06-22T11:17:09.465000格式是序列化/字符串输出环节的配置问题,不需要修改DateTime的存储逻辑,也完全可以在保留DateTime类型的前提下实现毫秒级精度输出。

通用实现思路

要同时满足「保留DateTime类型」和「只保留毫秒精度」,两步操作即可:

  • 先对DateTime对象的微秒部分做截断,仅保留前三位有效数值,后三位清零,这一步不会改变数据的DateTime类型
  • 输出/序列化时,指定格式仅展示3位毫秒位即可

常见场景代码实现

Python(datetime模块)

  • 截断DateTime精度到毫秒(保留DateTime类型):
from datetime import datetime
dt = datetime.utcnow()
# 微秒位后三位清零,仍为datetime类型
dt = dt.replace(microsecond=dt.microsecond // 1000 * 1000)
  • 输出指定毫秒格式:
# 格式化输出为要求的格式
format_str = dt.strftime('%Y-%m-%dT%H:%M:%S.') + f"{dt.microsecond // 1000:03d}Z"

C#(DateTime结构)

  • 截断DateTime精度到毫秒(保留DateTime类型):
DateTime dt = DateTime.UtcNow;
// 1tick = 100纳秒,10000tick = 1毫秒,整除后清零微秒部分
dt = new DateTime(dt.Ticks / 10000 * 10000, dt.Kind);
  • 输出指定毫秒格式:
string formatStr = dt.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");

数据库存储场景

如果是向数据库存储DateTime类型数据:

  • 建表时直接指定字段精度为毫秒级即可,例如MySQL使用DATETIME(3),PostgreSQL使用TIMESTAMP(3),数据库会自动截断微秒部分存储,取出后也不会生成多余的三位0
  • 不需要修改业务代码中的DateTime类型,仅需控制序列化输出格式即可满足要求

内容的提问来源于stack exchange,提问作者Javier Romero.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:54:03