Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的datetime.now在本地和服务器上运行时有所不同_Python_Heroku_Timezone_Pytz - Fatal编程技术网

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

python中的datetime.now在本地和服务器上运行时有所不同,python,heroku,timezone,pytz,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 if dif < datetime.t

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

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

now = datetime.datetime.now()
starttime = datetime.datetime.combine(datetime.date.today(), datetime.time(int(hour), int(minute)))
dif = now - starttime
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"
在本地运行这个ofc使用我的系统中的时间,我想一切都是正确的。然而,当我把它发布到服务器上并在那里运行时,时间已经倒退了一个小时。那么,我如何解决这个问题,使它始终使用我所在的时区

我住在瑞典

谢谢大家,代码示例将不胜感激

EDIT1

其余代码如下所示:

now = datetime.datetime.now()
starttime = datetime.datetime.combine(datetime.date.today(), datetime.time(int(hour), int(minute)))
dif = now - starttime
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"
我试着这样做,但无济于事:

from datetime import datetime, time, timedelta

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

datetime.datetime.now()
返回一个“原始数据时间对象”,因为它与本地时间相关,而不是时区

因此,您应该在整个应用程序中使用时区,创建一个“时区感知日期时间对象”,只需:

import pytz
from datetime import datetime
datetime.now(pytz.utc)
注意:我使用UTC时区,您可以使用任何您想要的时间

那么,我如何解决这个问题,使它始终使用我所在的时区

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

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

在服务器上:

#/usr/bin/env python
从日期时间导入日期时间,时间
导入pytz#$pip安装pytz

时区(“欧洲/巴黎”)#感谢您提供的解决方案,它运行良好。但这导致了我提供给我的问题的错误与我的问题相关。如果你知道如何解决这个问题,请告诉我@J.F。Sebastian@TimoCengiz:注意:我使用
from datetime import datetime
,而您的代码需要
import datetime
。使用一个或另一个,但不能同时使用两个。模块和模块内的类具有相同的名称。我知道这令人困惑。如果你需要更多的解释;使用from datetime import datetime时,具体询问有关导入和属性错误的单独问题。代码将更改为什么?像这样吗?:datetime.datetime.timedelta(..)@timocingiz:这是一个非常基本的问题(有一个是可以的)。但评论不是详细解释的地方。参见。无关:您可以使用
timedelta(分钟=103)
而不是
timedelta(秒=103*60)
谢谢:),很高兴知道
#!/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