相关疑难解决方法(0)

Python pytz时区函数返回一个9分钟的时区

由于某些我无法弄清楚的原因,从以下代码:

>>> from pytz import timezone
>>> timezone('America/Chicago')
Run Code Online (Sandbox Code Playgroud)

我明白了:

<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD>
Run Code Online (Sandbox Code Playgroud)

我想,我应该得到:

<DstTzInfo 'America/Chicago' LMT-1 day, 18:00:00 STD>
Run Code Online (Sandbox Code Playgroud)

...因为我认为我的时区距离UTC只有6小时9分钟.

我已经查看了源代码,pytz但我承认我还没有完全弄清楚出了什么问题.

我已将其他值传递给timezone()函数,它返回的值似乎是正确的.但由于某些原因,与我的时区相关的信息不正确.

最后,我旁边的立方体中的同事确认该函数在他的机器上返回正确的时区信息.

有谁知道为什么我的时区('America/Chicago')会在9分钟后关闭?我运行版本2015.7pytz安装使用pip.谢谢!

python timezone pytz timezone-offset

19
推荐指数
3
解决办法
5377
查看次数

使用pytz的Datetime时区转换

这只是另一篇文章pytz.

有两个函数可以在两个时区之间转换日期时间对象.第二个功能适用于所有情况.第一个函数在两种情况下失败,(3)和(4).类似的SO帖子没有这样的问题.任何解释基础上的区别localize(datetime.datetime)replace(tzinfo)将是一个很大的帮助.

>>> from dateutil.parser import parse
>>> import pytz
Run Code Online (Sandbox Code Playgroud)

第一个功能(越野车)

以下功能使用datetime.datetime.replace(tzinfo).

def buggy_timezone_converter(input_dt, current_tz='UTC', target_tz='US/Eastern'):
    '''input_dt is a datetime.datetime object'''
    current_tz = pytz.timezone(current_tz)
    target_tz = pytz.timezone(target_tz)
    target_dt = input_dt.replace(tzinfo=current_tz).astimezone(target_tz)
    return target_tz.normalize(target_dt)
Run Code Online (Sandbox Code Playgroud)

现在注意四个日期时间转换.

(1)从UTC到EST - 好的

>>> buggy_timezone_converter(parse('2013-02-26T04:00:00'))
Out[608]: datetime.datetime(2013, 2, 25, 23, 0, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)

(2)从UTC到EDT - 好的

>>> buggy_timezone_converter(parse('2013-05-26T04:00:00'))
Out[609]: datetime.datetime(2013, 5, 26, 0, 0, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
Run Code Online (Sandbox Code Playgroud)

(3)从EST到UTC - 不行.时间偏移是4小时56分钟.它应该是5个小时 …

python timezone datetime pytz python-2.7

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

将时区分配给Python日期时间

假设我有一个无时区的datetime对象:

import datetime
import pytz
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
dtUnaware = datetime.datetime(1979,2,20,6)
print(dtUnaware.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

这会产生:

1979-02-20 06:00:00 
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在,我想为此对象分配一个时区.好像我可以使用datetime.replace或者pytz.localize.

第一:

dtAware1 = dtUnaware.replace(tzinfo=pytz.timezone('Asia/Jerusalem'))
print(dtAware1.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

回报:1979-02-20 06:00:00 LMT+0221.其次:

dtAware2 = pytz.timezone('Asia/Jerusalem').localize(dtUnaware, is_dst=None)
print(dtAware2.strftime(fmt))
Run Code Online (Sandbox Code Playgroud)

回报1979-02-20 06:00:00 IST+0200.

第一种方法有什么问题?它似乎分配了一个错误的时区.难道我做错了什么?

python datetime pytz

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

当减去从字符串转换的日期时间时,total_seconds() 是错误的

当我这样做时,这total_seconds()是不正确的:

from datetime import timedelta, datetime
from pytz import timezone

timezone = timezone('Australia/Sydney')
startDate = datetime.now(timezone)
dateStr = '2020-05-18 20:12:30' # In our brain we know this time is in Sydney Time
endDate = datetime.strptime(dateStr, '%Y-%m-%d %H:%M:%S').replace(tzinfo=timezone)

diff = endDate - startDate
print(diff.total_seconds()) # incorrect answer
Run Code Online (Sandbox Code Playgroud)

当两个日期时间对象最初都是日期时间对象时,将它们相减,它们是正确的

from datetime import timedelta, datetime
from pytz import timezone

timezone = timezone('Australia/Sydney')
startDate = datetime.now(timezone)
endDate = datetime.now(timezone) + timedelta(hours=2, seconds=32)

diff = endDate - startDate
print(diff.total_seconds()) # correct answer
Run Code Online (Sandbox Code Playgroud)

我该如何解决我的问题?

python datetime timedelta python-3.x

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

Python Pytz 美国/太平洋时区问题

这是我的 Python 代码:

import pytz
from datetime import datetime

tz = pytz.timezone('US/Pacific')
now_local = datetime.now().replace(tzinfo=tz)
print("now_local: {}".format(now_local))
Run Code Online (Sandbox Code Playgroud)

它打印此输出:

now_local: 2018-11-13 12:06:03.255983-07:53
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我认为时区偏移量应该是-08:00而不是-07:53. 我很确定美国太平洋的时区偏移是 8 小时。

我错过了什么吗?

我使用的是 Python 版本 2.7.14 和 Pytz 版本 2018.4

python timezone pytz

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