当前位置: 首页 > 面试题库 >

Python的夏令时

许承悦
2023-03-14
问题内容

我正在编写一个处理很多时区并跨越时区的程序。我最常处理的两件事是从“ now”创建一个datetime对象,然后本地化一个朴素的datetime对象。

要从现在开始在太平洋时区创建datetime对象,我目前正在执行此操作(python 2.7.2+)

from datetime import datetime
import pytz
la = pytz.timezone("America/Los_Angeles")
now = datetime.now(la)

关于DST,这是否正确?如果没有,我想应该这样做:

now2 = la.localize(datetime.now())

我的问题是为什么?谁能告诉我第一个错误而第二个秒正确的情况?

至于我的秒数问题,假设我在2012年9月1日上午8:00在加利福尼亚州洛杉矶的某个用户输入中得到了一个幼稚的日期和时间。是这样使日期时间正确的方法:

la.localize(datetime(2012, 9, 1, 8, 0))

如果没有,我应该如何建立这些日期时间?


问题答案:

从pytz文档中:

处理时间的首选方法是始终使用UTC,仅在生成人类可读的输出时才转换为本地时间。

因此,理想情况下,您应该使用utcnow而不是now

假设由于某种原因,您的双手被绑住了并且需要处理当地时间,那么如果您在夏时制转换窗口中尝试对当前时间进行本地化,仍然会遇到问题。相同的情况datetime可能会发生两次,一次是在白天,另一次是在标准时间,并且该localize方法不知道如何解决冲突,除非您使用is_dst参数明确地告诉它。

因此,要获取当前的UTC时间:

utc = pytz.timezone('UTC')
now = utc.localize(datetime.datetime.utcnow())

并将其转换为您的本地时间(但仅在必须时):

la = pytz.timezone('America/Los_Angeles')
local_time = now.astimezone(la)

编辑:正如@JF Sebastian)的评论中指出的那样,您使用的第一个示例datetime.now(tz)在所有情况下均适用。如上文所述,您的第二个示例在秋天过渡期间失败了。我仍然主张除显示外,所有时间均使用UTC而非本地时间。



 类似资料:
  • 问题内容: 如何检查夏令时是否有效? 问题答案: 您可以使用并查看返回值中的标志。 使用,您可以在任意时间问相同的问题,以了解DST在当前时区是否有效。

  • 轻触方格启用设定,即可将夏令时反映于时间显示中。

  • 夏令时间 选择[标准]或[夏令时间]。

  • 约旦有夏令时...是,还是不?? 谢了!

  • 我的API使用ISO 8601向客户表示时间。我们有一个功能,我们希望显示它来自哪个时区。通过纯粹存储时区偏移,我们失去了对该细节的跟踪。 即,犹他州和亚利桑那州在一年中的一半时间遵守MST,犹他州在另一半时间切换到MDT。我们目前的解决方案是确定日期是否在夏令时,并在夏令时使用时区,否则使用,但亚利桑那州的ISO 8601日期将导致太平洋夏令时。 有没有办法指定是否以ISO 8601格式观察夏令

  • 问题内容: 我们正在使用一个旧的应用程序,该应用程序以C / Unix格式存储日期。C时间基本上是自1970年1月1日以来的秒数。日期以整数形式存储在SQL Server数据库中。我正在为使用这些日期的报告编写视图。 到目前为止,我正在使用以下方法从UNIX时间转换为本地日期时间: 3600将从UTC转换为我们当地的GMT + 1时区。在冬天,这是正确的,但在夏季,由于夏令时,该时间减少了一个小时