tornado.ioloop.IOLoop.current().time() 不在我的时区,如何配置时区偏移?

tornado.ioloop.IOLoop.current().time() is not in my timezone, how to configure timezone offset?

tornado.ioloop.IOLoop.current().time() 给祖鲁语。我如何获得关于时区的时间以在 IOLoop.add_timeout(deadline) 中添加几秒作为截止日期,以便将来正确触发超时?

我的时间是+1h,它不会触发,因为60s i IOLoop.add_timeout(60) 已经过去了。但是在夏季我有 +2h 所以我必须在夏季和冬季正确添加我的时区偏移量...

幸运的是,这不是与时区相关的问题。让您感到困惑的可能是 deadlinedelay 术语。值得庆幸的是 IOLoop.add_timeout 的文档非常清楚,

deadline may be a number denoting a time (on the same scale as IOLoop.time, normally time.time), or a datetime.timedelta object for a deadline relative to the current time. Since Tornado 4.0, call_later is a more convenient alternative for the relative case since it does not require a timedelta object.

代码如下:

IOLoop.current().add_timeout(60, some_func)

实际上意味着 运行 unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)后 60 秒的函数,而不是从现在开始(time.time())。所以它会立即装配。

如文档所述,您可以

  • 将延迟作为时间增量对象传递

    import datetime
    IOLoop.current().add_timeout(datetime.timedelta(seconds=60), some_func)
    
  • 或使用IOloop.call_Later()

    IOLoop.current().call_later(delay=60, some_func)