44
44
import random
45
45
import time
46
46
47
+ try :
48
+ from datetime import timezone
49
+ utc = timezone .utc
50
+ except ImportError :
51
+ from schedule .timezone import UTC
52
+ utc = UTC ()
53
+
54
+
47
55
logger = logging .getLogger ('schedule' )
48
56
49
57
@@ -149,7 +157,7 @@ def idle_seconds(self):
149
157
:return: Number of seconds until
150
158
:meth:`next_run <Scheduler.next_run>`.
151
159
"""
152
- return (self .next_run - datetime .datetime .now ()).total_seconds ()
160
+ return (self .next_run - datetime .datetime .now (utc )).total_seconds ()
153
161
154
162
155
163
class Job (object ):
@@ -191,7 +199,7 @@ def __lt__(self, other):
191
199
192
200
def __repr__ (self ):
193
201
def format_time (t ):
194
- return t .strftime ('%Y-%m-%d %H:%M:%S' ) if t else '[never]'
202
+ return t .strftime ('%Y-%m-%d %H:%M:%S %Z ' ) if t else '[never]'
195
203
196
204
timestats = '(last run: %s, next run: %s)' % (
197
205
format_time (self .last_run ), format_time (self .next_run ))
@@ -396,7 +404,7 @@ def should_run(self):
396
404
"""
397
405
:return: ``True`` if the job should be run now.
398
406
"""
399
- return datetime .datetime .now () >= self .next_run
407
+ return datetime .datetime .now (utc ) >= self .next_run
400
408
401
409
def run (self ):
402
410
"""
@@ -406,7 +414,7 @@ def run(self):
406
414
"""
407
415
logger .info ('Running job %s' , self )
408
416
ret = self .job_func ()
409
- self .last_run = datetime .datetime .now ()
417
+ self .last_run = datetime .datetime .now (utc )
410
418
self ._schedule_next_run ()
411
419
return ret
412
420
@@ -423,7 +431,7 @@ def _schedule_next_run(self):
423
431
interval = self .interval
424
432
425
433
self .period = datetime .timedelta (** {self .unit : interval })
426
- self .next_run = datetime .datetime .now () + self .period
434
+ self .next_run = datetime .datetime .now (utc ) + self .period
427
435
if self .start_day is not None :
428
436
assert self .unit == 'weeks'
429
437
weekdays = (
@@ -454,15 +462,15 @@ def _schedule_next_run(self):
454
462
# If we are running for the first time, make sure we run
455
463
# at the specified time *today* (or *this hour*) as well
456
464
if not self .last_run :
457
- now = datetime .datetime .now ()
465
+ now = datetime .datetime .now (utc )
458
466
if (self .unit == 'days' and self .at_time > now .time () and
459
467
self .interval == 1 ):
460
468
self .next_run = self .next_run - datetime .timedelta (days = 1 )
461
469
elif self .unit == 'hours' and self .at_time .minute > now .minute :
462
470
self .next_run = self .next_run - datetime .timedelta (hours = 1 )
463
471
if self .start_day is not None and self .at_time is not None :
464
472
# Let's see if we will still make that time we specified today
465
- if (self .next_run - datetime .datetime .now ()).days >= 7 :
473
+ if (self .next_run - datetime .datetime .now (utc )).days >= 7 :
466
474
self .next_run -= self .period
467
475
468
476
0 commit comments