I am a bit confused on how to use datetime - python-3.x

I am running a simple code and I find myself to be a bit stuck.
I've downloaded DateTime from DateTime. And for some reason, it won't work. I might be writing the DateTime wrong. Any help would be appreciated.
I might be writing the time wrong ive switched it from:
datetime.today().minute
to
datetime.datetime.now()
Code:
def headfirst_pg_4():
odds = list(range(1,60, 2))
right_minute = datetime.datetime.now()
if right_minute in odds:
print("This minute seems a little odd")
else:
print("Not an odd minute")
If its an odd number it will print("This minute seems a little odd")
if its and even it will print("Not an odd minute")

You need to change right_minute = datetime.datetime.now()
to
right_minute = datetime.datetime.now().minute
to get the current minute.

Related

How to use multipule functions for this?

I want to have a function and a input work together to create something like this:
import time, sys
def sprint(s):
for c in s:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.05)
This last code is what I want to get to work. I want it to take input while performing the sprint function:
pas=input(sprint("LOGIN: ")
I think I know what you're looking for. There's an easy way to get around your problem.
import time
import sys
def sprint(s):
for c in s:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.05)
pas = sprint("LOGIN: ")
pas = input("")
It will act exactly the same way as before too. All I did was separate the sprint and input because they cannot coexist. However, doing sprint and THEN asking for input will work.
Your solution is bizarre (the one proposed by Johnny is better), but if you insist on it, make your function return an empty string that would be used as a parameter to input():
def sprint(s):
for c in s:
sys.stdout.write(c)
sys.stdout.flush()
time.sleep(0.05)
return ""

Cannot Use Time.Sleep In Python

I'm trying to make a login for a text-based OS in Python
I have tried to import time and time.sleep but it still doesn't work.
import time
usrname = str(input("What Is Your Username? "))
age = str(input("What Is You Age"))
print("Welcome",usrname)
if age <= 1:
print ("That`s An Invalid Age!")
time.sleep(3)
I don't see any errors because it's so fast it closes in 1/2 a second.
The condition if age <= 1: is never going to be triggered, because age is a string. As a result, the time.sleep() statement within the if block is never going to run.
In order for the conditional to work, you need to make age an int (perhaps by doing if int(age) <= 1:).

How to get python time to update

I would like to create a program that allows you to ask the current time. The problem is that the program only prints the time of its execution, not the actual current time.
My code:
import datetime
now = datetime.datetime.now()
user_input = input("")
if user_input == "what time is it":
print(str(now.hour) + ":" + str(now.minute))
If I started the program at 6:25, no matter what time it is, the program returns 6:25.
change your code to
import datetime
user_input = input("")
if user_input == "what time is it":
now = datetime.datetime.now()
print(str(now.hour) + ":" + str(now.minute))
the now variable is holding the timestamp of when you called the now function
The program is hitting the now = datetime.datetime.now() command when you run, not when you input. To solve this problem, just put the code inside the if statement. It will then time stamp the moment you enter your input.

So, i've been trying to make a python program to take a time.sleep() input so user puts in the number then it asks which website you wanna open

import webbrowser
import time
while True:
num = input("In How Much Time Would You Like To Open?: ")
value = float(num)
time.sleep(num)
sites = input("What website would you like to open?: ")
visit = "http://{}".format(sites)
webbrowser.open(visit)
why won't this work? try it yourself and see the mistake I have really no idea please help!
In python3 input() is returning a string. The program is converting this to a float, but then does not use it, still calling time.sleep(num). The question does not include the error message, but it probably was:
TypeError: an integer is required (got type str)
Simply using the float the code makes will fix it
import webbrowser
import time
while True:
sites = input("What website would you like to open?: ")
num = input("In How Much Time Would You Like To Open?: ")
value = float(num)
time.sleep(value) # <<-- HERE - was time.sleep(num)
visit = "http://{}".format(sites)
webbrowser.open(visit)
EDIT: Changed to ask for the website first

Python string time [duplicate]

How can I run a function in Python, at a given time?
For example:
run_it_at(func, '2012-07-17 15:50:00')
and it will run the function func at 2012-07-17 15:50:00.
I tried the sched.scheduler, but it didn't start my function.
import time as time_module
scheduler = sched.scheduler(time_module.time, time_module.sleep)
t = time_module.strptime('2012-07-17 15:50:00', '%Y-%m-%d %H:%M:%S')
t = time_module.mktime(t)
scheduler_e = scheduler.enterabs(t, 1, self.update, ())
What can I do?
Reading the docs from http://docs.python.org/py3k/library/sched.html:
Going from that we need to work out a delay (in seconds)...
from datetime import datetime
now = datetime.now()
Then use datetime.strptime to parse '2012-07-17 15:50:00' (I'll leave the format string to you)
# I'm just creating a datetime in 3 hours... (you'd use output from above)
from datetime import timedelta
run_at = now + timedelta(hours=3)
delay = (run_at - now).total_seconds()
You can then use delay to pass into a threading.Timer instance, eg:
threading.Timer(delay, self.update).start()
Take a look at the Advanced Python Scheduler, APScheduler: http://packages.python.org/APScheduler/index.html
They have an example for just this usecase:
http://packages.python.org/APScheduler/dateschedule.html
from datetime import date
from apscheduler.scheduler import Scheduler
# Start the scheduler
sched = Scheduler()
sched.start()
# Define the function that is to be executed
def my_job(text):
print text
# The job will be executed on November 6th, 2009
exec_date = date(2009, 11, 6)
# Store the job in a variable in case we want to cancel it
job = sched.add_date_job(my_job, exec_date, ['text'])
Might be worth installing this library: https://pypi.python.org/pypi/schedule, basically helps do everything you just described. Here's an example:
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
while True:
schedule.run_pending()
time.sleep(1)
Here's an update to stephenbez' answer for version 3.5 of APScheduler using Python 2.7:
import os, time
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, timedelta
def tick(text):
print(text + '! The time is: %s' % datetime.now())
scheduler = BackgroundScheduler()
dd = datetime.now() + timedelta(seconds=3)
scheduler.add_job(tick, 'date',run_date=dd, args=['TICK'])
dd = datetime.now() + timedelta(seconds=6)
scheduler.add_job(tick, 'date',run_date=dd, kwargs={'text':'TOCK'})
scheduler.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
# This is here to simulate application activity (which keeps the main thread alive).
while True:
time.sleep(2)
except (KeyboardInterrupt, SystemExit):
# Not strictly necessary if daemonic mode is enabled but should be done if possible
scheduler.shutdown()
I've confirmed the code in the opening post works, just lacking scheduler.run(). Tested and it runs the scheduled event. So that is another valid answer.
>>> import sched
>>> import time as time_module
>>> def myfunc(): print("Working")
...
>>> scheduler = sched.scheduler(time_module.time, time_module.sleep)
>>> t = time_module.strptime('2020-01-11 13:36:00', '%Y-%m-%d %H:%M:%S')
>>> t = time_module.mktime(t)
>>> scheduler_e = scheduler.enterabs(t, 1, myfunc, ())
>>> scheduler.run()
Working
>>>
I ran into the same issue: I could not get absolute time events registered with sched.enterabs to be recognized by sched.run. sched.enter worked for me if I calculated a delay, but is awkward to use since I want jobs to run at specific times of day in particular time zones.
In my case, I found that the issue was that the default timefunc in the sched.scheduler initializer is not time.time (as in the example), but rather is time.monotonic. time.monotonic does not make any sense for "absolute" time schedules as, from the docs, "The reference point of the returned value is undefined, so that only the difference between the results of consecutive calls is valid."
The solution for me was to initialize the scheduler as
scheduler = sched.scheduler(time.time, time.sleep)
It is unclear whether your time_module.time is actually time.time or time.monotonic, but it works fine when I initialize it properly.
dateSTR = datetime.datetime.now().strftime("%H:%M:%S" )
if dateSTR == ("20:32:10"):
#do function
print(dateSTR)
else:
# do something useful till this time
time.sleep(1)
pass
Just looking for a Time of Day / Date event trigger:
as long as the date "string" is tied to an updated "time" string, it works as a simple TOD function. You can extend the string out to a date and time.
whether its lexicographical ordering or chronological order comparison,
as long as the string represents a point in time, the string will too.
someone kindly offered this link:
String Comparison Technique Used by Python
had a really hard time getting these answers to work how i needed it to,
but i got this working and its accurate to .01 seconds
from apscheduler.schedulers.background import BackgroundScheduler
sched = BackgroundScheduler()
sched.start()
def myjob():
print('job 1 done at: ' + str(dt.now())[:-3])
dt = datetime.datetime
Future = dt.now() + datetime.timedelta(milliseconds=2000)
job = sched.add_job(myjob, 'date', run_date=Future)
tested accuracy of timing with this code:
at first i did 2 second and 5 second delay, but wanted to test it with a more accurate measurement so i tried again with 2.55 second delay and 5.55 second delay
dt = datetime.datetime
Future = dt.now() + datetime.timedelta(milliseconds=2550)
Future2 = dt.now() + datetime.timedelta(milliseconds=5550)
def myjob1():
print('job 1 done at: ' + str(dt.now())[:-3])
def myjob2():
print('job 2 done at: ' + str(dt.now())[:-3])
print(' current time: ' + str(dt.now())[:-3])
print(' do job 1 at: ' + str(Future)[:-3] + '''
do job 2 at: ''' + str(Future2)[:-3])
job = sched.add_job(myjob1, 'date', run_date=Future)
job2 = sched.add_job(myjob2, 'date', run_date=Future2)
and got these results:
current time: 2020-12-10 19:50:44.632
do job 1 at: 2020-12-10 19:50:47.182
do job 2 at: 2020-12-10 19:50:50.182
job 1 done at: 2020-12-10 19:50:47.184
job 2 done at: 2020-12-10 19:50:50.183
accurate to .002 of a second with 1 test
but i did run a lot of tests and accuracy ranged from .002 to .011
never going under the 2.55 or 5.55 second delay
#everytime you print action_now it will check your current time and tell you should be done
import datetime
current_time = datetime.datetime.now()
current_time.hour
schedule = {
'8':'prep',
'9':'Note review',
'10':'code',
'11':'15 min teabreak ',
'12':'code',
'13':'Lunch Break',
'14':'Test',
'15':'Talk',
'16':'30 min for code ',
'17':'Free',
'18':'Help ',
'19':'watever',
'20':'watever',
'21':'watever',
'22':'watever'
}
action_now = schedule[str(current_time.hour)]

Resources