相关疑难解决方法(0)

Python:如何获得"timezone aware"的datetime.today()值?

我试图从值中减去一个日期值datetime.today()来计算多久以前的东西.但它抱怨说:

TypeError: can't subtract offset-naive and offset-aware datetimes
Run Code Online (Sandbox Code Playgroud)

该值datetime.today()似乎不是"时区感知",而我的其他日期值是.如何获得值datetime.today()是时区的?现在它给我时间在当地时间,恰好是PST,即UTC-8hrs.最坏的情况是,有没有办法我可以手动输入时区值到datetime返回的对象datetime.today()并将其设置为UTC-8?当然,理想的解决方案是让它自动知道时区.

python timezone datetime date

277
推荐指数
11
解决办法
28万
查看次数

使用datetime获取python中的UTC时间戳

有没有办法通过指定日期来获取UTC时间戳?我期待的是:

datetime(2008, 1, 1, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

应该导致

 1199145600
Run Code Online (Sandbox Code Playgroud)

创建天真的日期时间对象意味着没有时区信息.如果我查看datetime.utcfromtimestamp的文档,则创建UTC时间戳意味着省略时区信息.所以我猜,创建一个天真的日期时间对象(就像我做的那样)会产生一个UTC时间戳.然而:

then = datetime(2008, 1, 1, 0, 0, 0, 0)
datetime.utcfromtimestamp(float(then.strftime('%s')))
Run Code Online (Sandbox Code Playgroud)

结果是

2007-12-31 23:00:00
Run Code Online (Sandbox Code Playgroud)

datetime对象中是否还有隐藏的时区信息?我究竟做错了什么?

python datetime timestamp utc

73
推荐指数
6
解决办法
13万
查看次数

如何使用pytz检查日期时间对象是否已本地化?

我想存储具有本地化UTC时区的日期时间对象.存储datetime对象的方法可以被赋予非本地化的日期时间(天真)对象或已经本地化的对象.如何确定是否需要本地化?

如果条件丢失的代码:

class MyClass:
  def set_date(self, d):
    # what do i check here?
    # if(d.tzinfo):
      self.date = d.astimezone(pytz.utc)
    # else:
      self.date = pytz.utc.localize(d)
Run Code Online (Sandbox Code Playgroud)

python timezone datetime pytz

57
推荐指数
3
解决办法
3万
查看次数

pytz localize vs datetime replace

我在pytz的.localize()函数中遇到了一些奇怪的问题.有时它不会调整本地化的日期时间:

.localize行为:

>>> tz
<DstTzInfo 'Africa/Abidjan' LMT-1 day, 23:44:00 STD> 
>>> d
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421)

>>> tz.localize(d)
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421, 
                  tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
>>> tz.normalize(tz.localize(d))
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421,
                  tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)

如您所见,由于本地化/规范化操作,时间没有改变.但是,如果使用.replace:

>>> d.replace(tzinfo=tz)
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421, 
                  tzinfo=<DstTzInfo 'Africa/Abidjan' LMT-1 day, 23:44:00 STD>)
>>> tz.normalize(d.replace(tzinfo=tz))
datetime.datetime(2009, 9, 2, 15, 1, 42, 91421,
                  tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)

这似乎调整了日期时间.

问题是 - 这是正确的,为什么其他的错?

python timezone datetime utc pytz

47
推荐指数
4
解决办法
4万
查看次数

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
查看次数

当减去从字符串转换的日期时间时,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
查看次数