【发布时间】:2015-10-31 10:25:29
【问题描述】:
delorean docs 显示这种方式获取给定时区的当前时间 using datetime:
from datetime import datetime
from pytz import timezone
EST = "US/Eastern"
UTC = "UTC"
d = datetime.utcnow()
utc = timezone(UTC)
est = timezone(EST)
d = utc.localize(d)
d = est.normalize(EST)
并将其与基于 delorian 的代码进行比较:
from delorean import Delorean
EST = "US/Eastern"
d = Delorean(timezone=EST)
I believedatetime 的例子应该写成:
from datetime import datetime
import pytz
eastern_timezone = pytz.timezone("US/Eastern")
d = datetime.now(eastern_timezone)
这样更简洁。
是否存在最后一个代码示例失败而第一个代码示例继续工作的情况?
from datetime import datetime
import pytz
d = datetime.utcnow()
d = pytz.utc.localize(d)
est = pytz.timezone('US/Eastern')
d = est.normalize(d)
return d
这还是太冗长了。
【问题讨论】:
-
他的目标是在项目主页上举例说明使用
Delorean比使用datetime和pytz更干净。这是一个糟糕的示例,因为它是不正确的代码,并且可以通过您的示例更好地处理,但是您的示例不符合最初的目标。也许提出一个新的例子来说明localize和normalize实际上是必要的,以及如何使用Delorean更容易处理? -
我向 delorean 提交了一个 issue,因此他们创建了一个 pull request 来清理第一个示例。 (他们还清理了 delorean 示例。)
-
@heenenee:我的问题是关于
datetime.now(tz):你是否总是可以使用它来返回给定时区的当前时间,而不是est.normalize(utc.localize(datetime.uctnow()).astimezone(est))。 -
@PatrickMaupin:the merged example 仍然过于冗长。问题仍然存在:您是否需要通过 UTC 和
tz.normalize()进行显式往返,或者您可以只使用datetime.now(tz),如问题所示。我认为datetime.now(tz)就足够了,但delorian's author disagrees -
我不反对,但第一个例子让我很困扰,因为它实际上并没有像编码那样工作(如下面的答案所示)。认为如果有意义的话,最好为分歧达成一致的目标:)
标签: python datetime timezone pytz delorian