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
相关产品推荐
相关产品推荐

