标签: pytz

将 Django TimeField 与时区感知日期时间进行比较;将原始时间与 timezone.now() 进行比较

我在整个应用程序中使用时区感知对象,但我有一个TimeField来表示一天中的通用每日时间:

class MyModel(models.Modal):
   ...
   start_time = models.TimeField()
Run Code Online (Sandbox Code Playgroud)

但是,在某些时候,我需要timezone.now()使用服务器的时区将当前时间与 start_time 进行比较,以查看该时间是否在任何给定的一天已经过去。

如何转换start_time为可比较的时区感知日期时间对象timezone.now()

我在用USE_TZ = True

python django datetime pytz

2
推荐指数
1
解决办法
4310
查看次数

努力在Python中将时区GMT转换为CST

我花了几个小时在这上面,但我的大脑似乎无法弄清楚,而且我发现的很多信息似乎都适用于 Python 2?

import datetime as dt
from datetime import datetime
from pytz import timezone
import pytz
time_stamp = 'Mon, 17 Dec 2018 18:05:01 GMT'

central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%a, %d %b %Y %H:%M:%S %Z')
published_cst = published_time.astimezone(central)
actual_time_published = published_cst.strftime('%a, %b %d %Y at %I:%M:%S %p %Z')




print(time_stamp)
print(published_time)
print(published_cst)
print(actual_time_published)
Run Code Online (Sandbox Code Playgroud)

预计 acutal_time_published 为 CST,因为published_cst 有 GMT-6 小时(第三个结果),但这里是每个打印命令的实际结果。

Mon, 17 Dec 2018 18:05:01 GMT
2018-12-17 18:05:01
2018-12-17 18:05:01-06:00
Mon, Dec 17 2018 at 06:05:01 PM CST
Run Code Online (Sandbox Code Playgroud)

拔我的头发! …

python timezone datetime pytz python-3.x

2
推荐指数
1
解决办法
1万
查看次数

“欧洲/马德里”时区与“Etc/GMT+1”不匹配

我正在尝试将 UTC 时间戳转换为西班牙时区的时间戳。

>>> import datetime as dt
>>> import pytz
>>> today = dt.datetime.utcfromtimestamp(1573516800)
datetime.datetime(2019, 11, 12, 0, 0)

>>> today.replace(tzinfo=pytz.timezone('Europe/Madrid')).timestamp()
1573517700.0

>>> today.replace(tzinfo=pytz.timezone('Etc/GMT+1')).timestamp()
1573520400.0
Run Code Online (Sandbox Code Playgroud)

我很惊讶我得到了不同的结果Europe/MadridEtc/GMT+1。为什么是这样?应该Europe/Madrid以不同的方式使用,或者这可能是一个错误?

python timezone datetime pytz

2
推荐指数
1
解决办法
6804
查看次数

如何强制 pytz 使用当前标准时区?

考虑以下:

from datetime import datetime

import pytz


new_years_in_new_york = datetime(
    year=2020,
    month=1, 
    day=1,
    hour=0,
    minute=0,
    tzinfo = pytz.timezone('US/Eastern'))
Run Code Online (Sandbox Code Playgroud)

我现在有一个日期时间对象,代表纽约 1 月 1 日午夜。奇怪的是,如果我使用 pytz 将其转换为 UTC,我会得到一个奇怪的日期时间,相差几分钟:

new_years_in_new_york.astimezone(pytz.utc)
# datetime.datetime(2020, 1, 1, 4, 56, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

请注意,纽约的午夜(以 pytz 表示)是UTC 时间的4:56。在 Stack Overflow 上的其他地方,我了解到这是因为pytz 使用您的/usr/share/zoneinfo数据,该数据在标准化之前使用本地平均时间来考虑时区。这可以在这里显示:

pytz.timezone('US/Eastern')
# <DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>
Run Code Online (Sandbox Code Playgroud)

看到了吗LMK-1 day, 19:04:00 STD?这是当地平均时间偏移,不是我想要的偏移,这是美国/东部时间而不是夏令时。

有没有办法强制 pytz 使用当前基于当前日期的标准偏移量集?2020 年新年,应该是 UTC-5。如果我提供的日期是在夏令时期间,我需要 UTC-4。我很困惑为什么 pytz 会在 2020 年日期使用基于 LMT 的偏移量。

python timezone datetime pytz

2
推荐指数
1
解决办法
1135
查看次数

从 America/New_York 时间到 UTC 再转换回 America/New_York 的日期时间转换不正确

我正在尝试将美国/纽约的时间转换为 UTC 时间,然后将其转换回纽约时间。但我在使用 时得到了不同的结果pytz

我正在这样做:

new_date = parser.parse("May 4, 2021")
new_date = new_date.replace(tzinfo=pytz.timezone("America/New_York"))
date = new_date.astimezone(pytz.timezone("UTC"))     
Run Code Online (Sandbox Code Playgroud)

输出:

datetime.datetime(2021, 5, 4, 4, 56, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)

当我尝试将其重新转换回纽约时间时,我得到以下信息:

date.astimezone(pytz.timezone("America/New_York"))
Run Code Online (Sandbox Code Playgroud)

我得到:

datetime.datetime(2021, 5, 4, 0, 56, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么会有 56 分钟的差异,可以采取什么措施来防止这种情况发生?

python datetime pytz

2
推荐指数
1
解决办法
1196
查看次数

如何在我的Django应用程序中包含'pytz'包以进行Heroku部署?

我正在尝试将(http://pytz.sourceforge.net/)中的pytz timezone包包含到我的Django应用程序(版本1.3)中,因此我可以改进时区功能.我很担心这个python包不会部署到Heroku中的应用程序上.我如何确保在Heroku上部署此包?

或者,如果有人能告诉我指出如何处理Django 1.3中的TZ问题,我会非常感激.

django heroku pytz

1
推荐指数
1
解决办法
1164
查看次数

Python:带有pytz时区标志的怪异行为

我在阿根廷,我的时间是GMT-3(http://wwp.greenwichmeantime.com/time-zone/south-america/argentina/)

我正在玩Pytz并注意到一些奇怪的东西,看看:

from pytz import timezone
bsas = timezone('America/Argentina/Buenos_Aires')

gmt_plus_3 = timezone('Etc/GMT+3')
gmt_min_3 = timezone('Etc/GMT-3')

# Date and time at this momement: 2012-07-26 10:23:01

fmt = '%Y-%m-%dT%H:%M:%S'
datetime.now(bs).strftime(fmt)  #'2012-07-26T10:23:01' <-- GOOD!

datetime.now(gmt_min_3).strftime(fmt)  #'2012-07-26T16:25:21' <-- WRONG!

datetime.now(gmt_plus_3).strftime(fmt)  #'2012-07-26T10:23:01' <-- GOOD! WTF!
Run Code Online (Sandbox Code Playgroud)

我期待:

GMT-3 should be 10:23:01 and gives me 16:23:01
GMT+3 should be 16:23:01 and gives me 10:23:01
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我做错了吗?

python datetime pytz

1
推荐指数
1
解决办法
258
查看次数

TZ数据库和多个美国时区

我使用pytz将时区与我的用户配置文件相关联.最初我认为它只包括PST,CST,EST等时区,但是当我运行时,pytz.country_timezones('US')我会收到以下列表:
[u'America/New_York', u'America/Detroit', u'America/Kentucky/Louisville', u'America/Kentucky/Monticello', u'America/Indiana/Indianapolis', u'America/Indiana/Vincennes', u'America/Indiana/Winamac', u'America/Indiana/Marengo', u'America/Indiana/Petersburg', u'America/Indiana/Vevay', u'America/Chicago', u'America/Indiana/Tell_City', u'America/Indiana/Knox', u'America/Menominee', u'America/North_Dakota/Center', u'America/North_Dakota/New_Salem', u'America/North_Dakota/Beulah', u'America/Denver', u'America/Boise', u'America/Phoenix', u'America/Los_Angeles', u'America/Metlakatla', u'America/Anchorage', u'America/Juneau', u'America/Sitka', u'America/Yakutat', u'America/Nome', u'America/Adak', u'Pacific/Honolulu']

另外:
pytz.all_timezones== 582 pytz.common_timezones== 432

我住在德克萨斯州,总是选择芝加哥,因为这就是互联网的运作方式,但现在我必须考虑到这一点,我真的很困惑我们应该在我们的应用程序中使用哪些时区,哪些是多余的.例如,America/Kentucky/LouisvilleAmerica/Kentucky/Monticello相同 - 为什么它们都存在?我知道这与印第安纳州的历史时区惨败有关,但为什么数据库没有更新以删除冗余?

我从来没有住在印第安纳州所以我不知道居民习惯于看到什么时区.另外由于像亚利桑那州这样的异常人员没有参与DST,它并不像仅包括PST,CST等那么简单.

是否有一些正式的TZ数据库时区子集可以解释所有美国居民?

python django timezone pytz

1
推荐指数
1
解决办法
223
查看次数

使用pytz将日期时间从一个时区转换为另一个时区

我有一个数据集,其中包括来自纽约的日期/时间戳,但没有时区信息。不记录 EDT 或 EST。

日期包括几年的每日数据,因此它包括:

  1. EDT 时区
  2. EST 时区

我想将这些日期/时间戳转换为法兰克福时间。

这涉及使用:

  1. CET时区
  2. CEST时区

视具体日期而定。

我已经看到在纽约时间, pytz 包括timezone('US/Eastern'),如果我理解正确,它包括两个时区(纽约时区)。

对于法兰克福,您似乎需要明确指定 CET 或 CEST(法兰克福时区)。

如何使用 pytz 进行这种转换?

python timezone datetime pytz timestamp-with-timezone

1
推荐指数
1
解决办法
2316
查看次数

如何使用 dateutil.tz.tz.tzoffset 来本地化使用 strptime 创建的时区天真日期时间?

我如何使用 dateutil.tz.tz.tzoffset 类型的对象来本地化具有正确时区和 DST 信息的时区原始日期时间对象,以便它可以正确转换为 UTC?或者,如何将 dateutil.tz.tz.tzoffset 转换为 pytz.timezone?

我一直无法找到有关使用 dateutil.tz.tz.tzoffset 对象本地化日期时间对象的好信息。请参阅下面的一些我审查过的更好的文章。

背景资料:

我正在处理大量日期字符串,其中大多数没有时区信息。在某些情况下,时间是格林威治标准时间,在其他情况下是本地时间。我必须首先确定创建这些各种日志的设备的时区,然后解析各种日期字符串,如果是本地时间,则添加添加时区,最后将其转换为 UTC。

我几乎让这一切都在工作,除了确定时区的唯一可靠方法是从文本文件中获取日期格式为 EDT、IST 等,因此我使用了以下链接中最高投票的帖子来完成这使用 dateutil 的 parser.parse() 函数并将其发送给它的 tzinfos 参数的字典。(在 Python 中使用时区缩写名称解析日期/时间字符串?

但是,这给我留下了一个 DateTime,它有一个 tzinfo type=dateutil.tz.tz.tzoffset。我没问题,除非我需要使用这个 tzinfo 来本地化不包含时区信息的字符串,并且 dateutil.tz.tz.tzoffset 类型没有像 pytz.timezone 那样的本地化选项,这是关键我的问题。

我让这太难了吗?我是否只是用我保存的 dateutil.tz.tz.tzoffset 对象替换了时区天真日期时间中的 tzinfo ?

代码:

下面读取日期字符串并将其保存为日期时间对象,将时区保存在 var 中以备后用,然后将日期字符串转换为 UTC:

from dateutil.parser import parse as parsedate
import pytz
from pytz import timezone
from datetime import datetime

timestr = 'Sat, 5/01/2019 8:00PM EDT' #only reliable source of timezone info
dtfromstrEDT = parsedate(timestr, tzinfos=tzd) …
Run Code Online (Sandbox Code Playgroud)

python datetime pytz python-dateutil

1
推荐指数
1
解决办法
1610
查看次数