Oct-11-2022, 03:29 PM
(This post was last modified: Oct-11-2022, 03:29 PM by deanhystad.)
scheduler.enterabs() takes a time argument.
https://docs.python.org/3/library/sched.html
https://docs.python.org/3/library/time.html
You should really save the reminder time as a datetime object. You can display the information any way you like but store it in a way that makes it easy to use. Having separate date and time columns makes it difficult to do things like sort your reminders by time or delete old reminders. Here I have to recombine the two values to get the datetime object that I need.
https://docs.python.org/3/library/sched.html
Quote:scheduler.enterabs(time, priority, action, argument=(), kwargs={})I tried using datetime.now as the timefunc, but got an error when calling scheduler.run()
Schedule a new event. The time argument should be a numeric type compatible with the return value of the timefunc function passed to the constructor. Events scheduled for the same time will be executed in the order of their priority. A lower number represents a higher priority.
Error: File "C:\Program Files\Python310\lib\sched.py", line 149, in run
delayfunc(time - now)
TypeError: 'datetime.timedelta' object cannot be interpreted as an integer
I decided to use time.time, as is shown in the docuentation and all examples If you use time.time as the timefunc for the scheduler, the time for the enter() and enterabs() must be compatible with the value returned by time.time(). According to the documentation for time.time():https://docs.python.org/3/library/time.html
Quote:time.time() → floatdatetime.timestamp() is an object method that converts a datetime object into an int that is compatible with time.time().
Return the time in seconds since the epoch as a floating point number. The specific date of the epoch and the handling of leap seconds is platform dependent. On Windows and most Unix systems, the epoch is January 1, 1970, 00:00:00 (UTC) and leap seconds are not counted towards the time in seconds since the epoch. This is commonly referred to as Unix time. To find out what the epoch is on a given platform, look at gmtime(0).
You should really save the reminder time as a datetime object. You can display the information any way you like but store it in a way that makes it easy to use. Having separate date and time columns makes it difficult to do things like sort your reminders by time or delete old reminders. Here I have to recombine the two values to get the datetime object that I need.
def schedule_reminder(reminder, date, time): """Schedule a reminder""" dt = datetime.strptime(f"{date} {time}", "%Y-%m-%d %I:%M %p") schedule.enterabs( time=schedule_time.timestamp(), priority=1, # I previously forgot that you must specify a priority action=send_reminder, arguments=(reminder, scheduled_time))