python2.7使用APScheduler报错:AttributeError: ‘datetime.datetime‘ object has no attribute ‘timestamp‘

环境

python:2.7
APScheduler:3.9.1.post1

问题

执行定时任务脚本时报错如下

Traceback (most recent call last):
  File "scheduled_tasks.py", line 163, in <module>
    scheduler.start()
  File "/home/xiaoju/python27/lib/python2.7/site-packages/apscheduler/schedulers/blocking.py", line 20, in start
    super(BlockingScheduler, self).start(*args, **kwargs)
  File "/home/xiaoju/python27/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 167, in start
    self._real_add_job(job, jobstore_alias, replace_existing)
  File "/home/xiaoju/python27/lib/python2.7/site-packages/apscheduler/schedulers/base.py", line 863, in _real_add_job
    replacements['next_run_time'] = job.trigger.get_next_fire_time(None, now)
  File "/home/xiaoju/python27/lib/python2.7/site-packages/apscheduler/triggers/interval.py", line 68, in get_next_fire_time
    return normalize(next_fire_time)
  File "/home/xiaoju/python27/lib/python2.7/site-packages/apscheduler/util.py", line 431, in normalize
    return datetime.fromtimestamp(dt.timestamp(), dt.tzinfo)
AttributeError: 'datetime.datetime' object has no attribute 'timestamp'

这种情况其实就是python2.7的datetime.datetime没有timestamp这个方法。也就是说这个版本的apscheduler并不适配Python2.7。

其实最适用于python2的版本是2.1.2

解决方式

  1. 更换apscheduler版本为2.1.2
  2. 将python2升级到python3
  3. 如果以上方法觉得有些麻烦或者不方便的话,那就直接改底层源码,简单暴力。把用到的timestamp的地方换个方式实现取时间戳
def normalize(dt):
    #return datetime.fromtimestamp(dt.timestamp(), dt.tzinfo)
    import time
    return datetime.fromtimestamp(time.mktime(dt.timetuple()), dt.tzinfo)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值