python中的datetime.now在本地和服务器上运行时有所不同

时间:2015-02-27 22:46:40

标签: python heroku timezone pytz

我正在使用Heroku来运行一些python代码。

我编写的代码使用预定义的时间,例如: 16:00 ,并将其与当前时间进行比较,并计算差异,如下所示:

now = datetime.datetime.now()
starttime = datetime.datetime.combine(datetime.date.today(), datetime.time(int(hour), int(minute)))
dif = now - starttime

运行本地ofc使用我的系统中的时间我猜,一切都是正确的。但是,当我在服务器上发布它并在那里运行它的时间是一小时后。那我怎么能解决这个问题所以它总是使用我所在的时区?

我住在瑞典

谢谢大家,代码示例将深表感谢。

EDIT1

其余代码如下所示:

if dif < datetime.timedelta(seconds=0):
    hmm = 3                                     
elif dif < datetime.timedelta(seconds=45*60):
    t = dif.total_seconds() / 60
    time, trash = str(t).split(".")
    time = time+"'"
elif dif < datetime.timedelta(seconds=48*60):
    time = "45'"
elif dif < datetime.timedelta(seconds=58*60):
    time = "HT"
elif dif < datetime.timedelta(seconds=103*60):
    t = (dif.total_seconds() - 840) / 60
    time, trash = str(t).split(".")
    time = time+"'"
elif dif < datetime.timedelta(seconds=108*60):
    time = "90'"
else:
    time = "FT"

并使用您提供的导入我现在收到此错误:

AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'

我试图这样做,但没有帮助:

from datetime import datetime, time, timedelta

2 个答案:

答案 0 :(得分:3)

  

那我怎么能解决这个问题呢?它总是使用我所在的时区?

在tz数据库中查找您的时区,例如,使用tzlocal module。在本地计算机上运行

#!/usr/bin/env python
import tzlocal # $ pip install tzlocal

print(tzlocal.get_localzone().zone)

如果tzlocal能够获得时区ID,那么您应该看到类似:Europe/Paris的内容。将此字符串传递给服务器。

在服务器上

#!/usr/bin/env python
from datetime import datetime, time
import pytz # $ pip install pytz

tz = pytz.timezone('Europe/Paris') # <- put your local timezone here
now = datetime.now(tz) # the current time in your local timezone
naive_starttime = datetime.combine(now, time(int(hour), int(minute)))
starttime = tz.localize(naive_starttime, is_dst=None) # make it aware
dif = now - starttime

答案 1 :(得分:0)

这是由于服务器时间与您的时间不同。例如,如果您在中国,服务器在美国。 datetime.now()应为两者返回不同的时间。

datetime.datetime.now()会返回&#34;天真的数据时间对象&#34; ,因为它与本地时间而非时区有关。

因此,您应该在整个应用程序中使用时区,以创建&#34;时区感知日期时间对象&#34;

import pytz
from datetime import datetime
datetime.now(pytz.utc)

注意:我使用UTC时区,您可以随意使用。