To Liam and Brian,
Liam, actually, Brian did Sunday. See his post in this thread of Date: Sun, 05 Dec 2004 19:53:01 -0500. But you've done is interesting, and I thank you.
Here's Brian's script in it's bare bones, without the input error checking and his extensive and helpful comments:
===============begin code==================== import datetime import time
alarm_time = raw_input("Enter alarm time as hh:mm ")
alarm_time_list = alarm_time.split(':')
alarm_hour, alarm_minute = (int(alarm_time_list[0]),
int(alarm_time_list[1]))
now = datetime.datetime.now() alarm_datetime = datetime.datetime(now.year+4, now.month, now.day, alarm_hour, alarm_minute) print alarm_datetime alarm_in_seconds = (alarm_datetime - now).seconds print "I should wake up in %d seconds" % alarm_in_seconds time.sleep(alarm_in_seconds) print "I'm awake!" ================end code=====================
You can see that he gets the number-of-seconds difference directly with the line,
"alarm_in_seconds = (alarm_datetime - now).seconds",
and doesn't need to compute the seconds to sleep from the difference expressed as hours, minutes and seconds.
I like your alarm clock a lot, <http://www.rafb.net/paste/results/ctOH1T36.html>. I first tried to run it with IDLE, then remembered that mscvrt won't catch keypresses if run with IDLE. Works fine in the console!
Instead of your beeps in the second while loop, I think I'd need
winsound.PlaySound('SystemAsterisk', winsound.SND_ALIAS) winsound.PlaySound('SystemHand', winsound.SND_ALIAS)
and turn my speakers way up!
Brian, where did you learn about the ".seconds". And the .year, .month, .day of
"alarm_datetime = datetime.datetime(now.year + 4, now.month, now.day, alarm_hour, alarm_minute)"?
Does this come from a general knowledge of OOP, or is it somewhere in the Python docs? The only thing I've seen, and it's not an explanation, is in note (1) on http://docs.python.org/lib/datetime-date.html
It seems I've missed out on something important
BTW I'm not sure you need the +4 of "now.year + 4". I've run this without the +4 and it doesn't seem to be needed. And notes (1) and (4) on that page seem to say this, as far as I understand them.
Dick
Liam Clarke wrote at 03:56 12/6/2004:
Hey Dick, don't know if anyone actually answered your original question.
>IOW, is there an easier way to calculate the time difference between the >time now, say 08:51 and say, tomorrow at 03:45, to take an example of the >most difficult case?
So, you need two datetime.datetime objects.
>>>now = datetime.datetime(year, month, day, hours, minutes, seconds) >>>now = datetime.datetime(2004, 12, 7*, 8*, 51, 00) >>> later= datetime.datetime(2004, 12, 8*, 3*, 45, 00)
*Can't start with zero. Must be 8 not 08
>>> difference = later - now
>>> print difference
18:54:00
>>> type(difference)
<type 'datetime.timedelta'>
>>> timeList=str(difference).split(":")
>>> print timeList
['18', '54', '00']
>>> timeinSecs=(int(timeList[0])*3600)+(int(timeList[1])*60)+int(timeList[2])
>>> print timeinSecs
68040
Now, to check if that's right...
>>> timeChange=datetime.timedelta(seconds=68040) >>> checkVal=now + timeChange >>> print checkVal 2004-12-08 03:45:00
Looks good to me.
So, to summarise the code part -
now = datetime.datetime(2004, 12, 7, 8, 51, 00) later= datetime.datetime(2004, 12, 8, 3, 45, 00) difference = later - now timeList=str(difference).split(":") timeinSecs=(int(timeList[0])*3600)+(int(timeList[1])*60)+int(timeList[2])
And that's the easier way to find the difference between two times in seconds.
HTH
Liam Clarke
P.S. If you're interested, here's a 20 line alarm clock I wrote because my one broke this morning.
http://www.rafb.net/paste/results/ctOH1T36.html
_______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor