【问题标题】:Expression of timezone offset - clarification时区偏移的表达 - 澄清
【发布时间】:2013-05-16 13:11:26
【问题描述】:

我目前正在处理的事情需要为世界各地的用户提供本地化时间。所有日期时间都存储为 UTC,因此转换它们很容易,而且我们有一个已知的、安全的参考点等。

然而,关于如何表达偏移量的一些事情让我有点摸不着头脑。

>>> timezone.now()  # get the UTC-stamped server time as an example
datetime.datetime(2013, 5, 21, 16, 37, 54, 62598, tzinfo=<UTC>)

>>> eastern = pytz.timezone('US/Eastern')  # localise this to US/Eastern
>>> utc_dt.astimezone(eastern)
datetime.datetime(2013, 5, 21, 12, 37, 54, 62598,   
    tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 

(这是我在日期时间输出中的换行符,只是为了更容易发现我在说什么。)

这个偏移量的表达似乎有点过头了。与其简单地说它是与 UTC 的 -4 小时的偏移量,不如说是减去一天加 20:00 小时。对吗?

【问题讨论】:

  • 我不知道为什么文本是这样形成的,但它只是调试输出,对吧?那么它的格式真的很重要吗?在您的应用程序中使用时,您可能会使用 strftime 或类似名称。
  • 另外,您应该知道US/* 时区是别名,出于向后兼容性的原因。您可能应该改用America/New_York。请参阅here 获取列表。
  • 谢谢 - 是的,我们将真正使用美国/纽约、芝加哥等地,但我只是以美国/东部为例。

标签: python datetime timezone pytz


【解决方案1】:

您会看到pytz 时区类的repr,其中包含在现实生活中使用时无关紧要的实现细节。如果你 print 同一个对象,你会看到不同的东西:

>>> print utc_dt.astimezone(eastern)
2013-05-21 15:00:27.648000-04:00

【讨论】:

  • 谢谢。完全有道理。但是,任何想法,为什么它是这样实施的?很好奇。
  • @stevejalim,抱歉,我对 pytz 的内部工作原理一无所知。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多