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

Python如何获取前一天UTC午夜时间并转换为指定格式

解决方法

要获取**前一天UTC午夜(00:00:00)**的时间并格式化为YYYY-MM-DDTHH:MM:SS.fffZ格式,你需要先将时间截断到日期的起始时刻,再调整时区并格式化,而不是简单减去24小时。原代码的问题在于仅对当前时间做了时长偏移,没有重置时分秒到午夜。

方案1:直接基于UTC时区处理

这种方式直接操作UTC时间,一步得到目标结果:

from datetime import datetime, timedelta
import pytz

# 获取当前UTC时间
utc_now = datetime.now(pytz.utc)
# 截断到UTC当天的0点,再减去1天,得到前一天UTC午夜
yesterday_utc_midnight = utc_now.replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=1)
# 格式化为要求的格式(保留三位毫秒,末尾加Z表示UTC)
formatted_time = yesterday_utc_midnight.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
print(formatted_time)

方案2:基于US/Eastern时区的前一天转换为UTC

如果你的业务逻辑是基于US/Eastern时区的“前一天”,再转换为UTC午夜,可以用这个方法:

from datetime import datetime, timedelta
import pytz

tz_est = pytz.timezone('US/Eastern')
# 获取当前US/Eastern时间,截断到当天0点后减1天,得到前一天本地午夜
yesterday_est_midnight = tz_est.localize(
    datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) - timedelta(days=1),
    is_dst=None
)
# 转换为UTC时区
yesterday_utc = yesterday_est_midnight.astimezone(pytz.utc)
# 格式化输出
formatted_time = yesterday_utc.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
print(formatted_time)

关键说明

  • replace(hour=0, minute=0, second=0, microsecond=0):将时间重置为当天的午夜0点,这是实现“午夜时刻”的核心步骤。
  • 时区转换:使用astimezone(pytz.utc)将本地时间转换为UTC时间,确保最终输出的是UTC标准时间。
  • 格式化:strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z' 生成带三位毫秒、末尾加Z的UTC时间格式,匹配你期望的输出样式。

内容的提问来源于stack exchange,提问作者Db8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:39:23