python3 datetime.timestamp 在 python2 中?
python3 datetime.timestamp in python2?
我有一段 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()
.
不一样
可能是因为 winter/summer 小时?
在python2中使用time.time()
,类似于python3
中的datetime.timestamp()
如果您需要当前日期时间实现,请参阅 python3 中的实现:
def timestamp(self):
"Return POSIX timestamp as float"
if self._tzinfo is None:
return _time.mktime((self.year, self.month, self.day,
self.hour, self.minute, self.second,
-1, -1, -1)) + self.microsecond / 1e6
else:
return (self - _EPOCH).total_seconds()
where _EPOCH = datetime(1970, 1, 1, tzinfo=timezone.utc)
使用以下转换为 python 2
中的时间戳
int((mod_time.mktime(first_run.timetuple())+first_run.microsecond/1000000.0))
我有一段 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()
.
可能是因为 winter/summer 小时?
在python2中使用time.time()
,类似于python3
datetime.timestamp()
如果您需要当前日期时间实现,请参阅 python3 中的实现:
def timestamp(self):
"Return POSIX timestamp as float"
if self._tzinfo is None:
return _time.mktime((self.year, self.month, self.day,
self.hour, self.minute, self.second,
-1, -1, -1)) + self.microsecond / 1e6
else:
return (self - _EPOCH).total_seconds()
where _EPOCH = datetime(1970, 1, 1, tzinfo=timezone.utc)
使用以下转换为 python 2
中的时间戳int((mod_time.mktime(first_run.timetuple())+first_run.microsecond/1000000.0))