关于python:python3中的python3 datetime.timestamp?

python3 datetime.timestamp in python2?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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号工作。我唯一的问题是:

1
first_run.timestamp()

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

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

但我的时区似乎有问题(UTC太简单了,我在UTC+2)。在第一次运行时应该有一些TZINFO。也许我该加些什么?

我完全迷路了,任何帮助都会受到感激。非常感谢你预先帮助我。

Eddi1:

在haochen wu的评论之后,我已经阅读了将datetime转换为unix时间戳,并将其转换回python

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

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

解决方案应该是

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

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

可能是因为冬夏季节?


使用下面的代码在python 2中转换为时间戳

埃多克斯1〔2〕


在python2中使用time.time(),类似于python3中的datetime.timestamp()

日期时间.datetime.timestamp

如果需要当前的日期时间实现,请参见python3中的实现:

1
2
3
4
5
6
7
8
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()

其中_epoch=datetime(1970,1,1,tzinfo=timezone.utc)