python2 中的 python3 datetime.timestamp?

标签 python python-3.x python-2.x

我有一段 python3 代码,它在 22:00 调用一个函数。

# Imports
from datetime import datetime, date, time, timedelta
import sched
import time as mod_time

# Find the next datetime corresponding to 22:00
first_run = datetime.combine(date.today(), time(22,0))
first_run = first_run if first_run > datetime.now() else first_run + timedelta(1)

# Dumb test function
def my_function():
    print('my_function')

# Run the function at 22:00
scheduler = sched.scheduler(mod_time.time, mod_time.sleep)
scheduler.enterabs(first_run.timestamp(), 1, my_function, ())
scheduler.run()

此代码目前在 python3 中运行。我希望它能在 python2 中工作。我唯一的问题来自以下方面:

first_run.timestamp()

我试着用类似的东西替换它:

(first_run - datetime(1970, 1, 1)).total_seconds()

但是我的时区似乎有问题(UTC 太简单了,我现在是 UTC+2)。 first_run 中应该有 tzinfo 的东西。也许我应该添加一些东西?

我很迷茫,如有任何帮助,我们将不胜感激。 非常感谢您对我的帮助。

编辑1:

吴昊辰评论后,我看了Convert datetime to Unix timestamp and convert it back in python

现在我知道以下几行对我来说是等价的:

(datetime.now() - datetime(1970, 1, 1)).total_seconds()
(datetime.now() - datetime.utcfromtimestamp(0)).total_seconds()

解决方案应该是

(datetime.now() - datetime.fromtimestamp(0)).total_seconds()

但事实并非如此。该值仍然不同于 mod_time.time()

可能是因为冬季/夏季时间?

最佳答案

在 python 2 中使用以下转换为时间戳

int((mod_time.mktime(first_run.timetuple())+first_run.microsecond/1000000.0))

关于python2 中的 python3 datetime.timestamp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020988/

相关文章:

python - 尽管安装了 python 模块,但仍无法导入它们

python - 如何使用索引替换列值的前两个字母

python - 从字符串中删除子字符串时出现意外结果

python - Django多表单1 View ..表单错误问题

python - 在列组合上扩展数据框

javascript - 如何在selenium中执行javascript

python - 无法在 Python 2.7 或 Python 3.3 中导入小数

python - 仅包含时间部分的 DatetimeIndex : is it possible

python - 是否有可能使用 python 2 和 python 3 模块的应用程序?

python - 如果同一索引处的值相等,则删除两个列表的尾随项