【发布时间】:2013-03-11 17:23:09
【问题描述】:
我有一个 python 脚本,它使用此调用以 YYYY-MM-DD 格式获取昨天的日期:
str(date.today() - timedelta(days=1)))
它大部分时间都有效,但是今天早上在2013-03-11 0:35 CDT 运行脚本时,它返回"2013-03-09" 而不是"2013-03-10"。
大概是夏令时(昨天开始)是罪魁祸首。我猜timedelta(days=1)的实现方式是减去24小时,而2013-03-11 0:35 CDT之前的24小时是2013-03-09 23:35 CST,这导致了"2013-03-09"的结果。
那么在 python 中获取昨天日期的 DST 安全的好方法是什么?
更新: 在 bukzor 指出我的代码应该可以正常工作之后,我回到脚本并确定它没有被使用。它设置了默认值,但包装器外壳脚本明确设置了日期。所以 bug 是在 shell 脚本中,而不是在 python 脚本中。
【问题讨论】:
-
这样的问题只会发生在支持 timezeone 的日期时间对象上,
date.today()不是。对象具体是如何实例化的? -
@bukzor 你是对的。原来是一个 shell 脚本传入了错误的日期,请参阅上面的更新。
-
这个问题应该被关闭; OP 断言他的错误在其他地方。
-
@Robᵩ:来自 google 的人可能会觉得这个问题很有用。时区不是小事。例如,您的回答(带有序数)清楚地表明需要“昨天”而不是“24 年前”,因为问题显示可能是不同的一天。
date.today() - timedelta(days=1)更短,但意图不太清楚。如果你想提前一天是正确的。如果你想要一个 24 小时前的时刻,这是不正确的。
标签: python