By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,001 Members | 1,176 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,001 IT Pros & Developers. It's quick & easy.

Comparing dates problem

P: n/a
Hi,

I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:

5 minutes until appointment

or

10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.

I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.

Any ideas would be great!

Mike

May 9 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a
On May 10, 7:34 am, kyoso...@gmail.com wrote:
Hi,

I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:

5 minutes until appointment

or

10 minutes past your appointment

Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.

I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.
Ermmm ... what's wrong with

minutes = seconds / 60.0
hours = minutes / 60.0

?

May 9 '07 #2

P: n/a
ky******@gmail.com wrote:
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:

5 minutes until appointment

or

10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.
Not the most elegant piece of code on earth,
but this piece of code works for me (cut-and-pasted
directly from a working project, so doesn't
*exactly* match your requirement).

<code>
def deltastamp (now, then):

def pluralise (base, n):
if n 1:
return "%d %ss" % (n, base)
else:
return "%d %s" % (n, base)

if now then:
output_format = "%s ago"
delta = now - then
else:
output_format = "in %s"
delta = then - now

days = delta.days
if days <0:
wks, days = divmod (days, 7)
if wks 0:
output = pluralise ("wk", wks)
else:
output = pluralise ("day", days)
else:
mins, secs = divmod (delta.seconds, 60)
hrs, mins = divmod (mins, 60)
if hrs 0:
output = pluralise ("hr", hrs)
elif mins 0:
output = pluralise ("min", mins)
else:
output = pluralise ("sec", secs)

return output_format % output

</code>

TJG
May 10 '07 #3

P: n/a
On May 9, 5:12 pm, John Machin <sjmac...@lexicon.netwrote:
On May 10, 7:34 am, kyoso...@gmail.com wrote:
Hi,
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:
5 minutes until appointment
or
10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.
I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.

Ermmm ... what's wrong with

minutes = seconds / 60.0
hours = minutes / 60.0

?
I'm sure there is a hack for doing something like what you suggest,
but it would be messy. The problem is that I get a datetime object
returned and division really isn't something you can do to one of
those objects. Besides, if I had seconds returned, I would want to
multiply by 60, not divide.

Maybe I misunderstand you.

Mike

May 10 '07 #4

P: n/a
On May 10, 2:37 am, Tim Golden <m...@timgolden.me.ukwrote:
kyoso...@gmail.com wrote:
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:
5 minutes until appointment
or
10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.

Not the most elegant piece of code on earth,
but this piece of code works for me (cut-and-pasted
directly from a working project, so doesn't
*exactly* match your requirement).

<code>
def deltastamp (now, then):

def pluralise (base, n):
if n 1:
return "%d %ss" % (n, base)
else:
return "%d %s" % (n, base)

if now then:
output_format = "%s ago"
delta = now - then
else:
output_format = "in %s"
delta = then - now

days = delta.days
if days <0:
wks, days = divmod (days, 7)
if wks 0:
output = pluralise ("wk", wks)
else:
output = pluralise ("day", days)
else:
mins, secs = divmod (delta.seconds, 60)
hrs, mins = divmod (mins, 60)
if hrs 0:
output = pluralise ("hr", hrs)
elif mins 0:
output = pluralise ("min", mins)
else:
output = pluralise ("sec", secs)

return output_format % output

</code>

TJG
Thanks for the advice. I think this will work for me with some minor
tweaking. If not, I will post again.

Mike

May 10 '07 #5

P: n/a
On Thu, 2007-05-10 at 11:52 -0700, ky******@gmail.com wrote:
I'm sure there is a hack for doing something like what you suggest,
but it would be messy. The problem is that I get a datetime object
returned and division really isn't something you can do to one of
those objects. Besides, if I had seconds returned, I would want to
multiply by 60, not divide.
If you subtract that datetime object from the current datetime, you'll
get a timedelta object that gives you the number of days and seconds
(and microseconds, if you care) between the two datetimes:
>>import datetime
dt1 = datetime.datetime(2007,5,1,12,0,0)
dt2 = datetime.datetime.now()
delta = dt2 - dt1
delta.days
9
>>delta.seconds
11219

Now, if 60 seconds are one minute, 11219 seconds are how many minutes?
(Answer left as an exercise for the reader.)

Hope this helps,

--
Carsten Haese
http://informixdb.sourceforge.net
May 10 '07 #6

P: n/a
On May 10, 1:52 pm, kyoso...@gmail.com wrote:
On May 9, 5:12 pm, John Machin <sjmac...@lexicon.netwrote:
On May 10, 7:34 am, kyoso...@gmail.com wrote:
Hi,
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:
5 minutes until appointment
or
10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.
I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.
Ermmm ... what's wrong with
minutes = seconds / 60.0
hours = minutes / 60.0
?

I'm sure there is a hack for doing something like what you suggest,
but it would be messy. The problem is that I get a datetime object
returned and division really isn't something you can do to one of
those objects. Besides, if I had seconds returned, I would want to
multiply by 60, not divide.

Maybe I misunderstand you.

Mike
Of course, after posting this, I felt very stupid...

May 10 '07 #7

P: n/a
On May 11, 4:52 am, kyoso...@gmail.com wrote:
On May 9, 5:12 pm, John Machin <sjmac...@lexicon.netwrote:


On May 10, 7:34 am, kyoso...@gmail.com wrote:
Hi,
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:
5 minutes until appointment
or
10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.
I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.
Ermmm ... what's wrong with
minutes = seconds / 60.0
hours = minutes / 60.0
?

I'm sure there is a hack for doing something like what you suggest,
but it would be messy. The problem is that I get a datetime object
returned and division really isn't something you can do to one of
those objects. Besides, if I had seconds returned, I would want to
multiply by 60, not divide.

Maybe I misunderstand you.
Maybe it's mutual -- hack? messy? multiply? Where I come from, 180
seconds is (180 / 60 = 3) minutes. 180 seconds * 60 is 10800 sixtieths-
of-a-second, which appears to be travelling away from a solution to
your problem.

You have *TWO* datetime objects, (say) appt_dt and now_dt.

delta =appt_dt - now_dt # delta is a timedelta object.
# calculate difference in minutes
mins = delta.days * 24 * 60 + delta.seconds // 60

Have you not read Tim Golden's response?

May 10 '07 #8

P: n/a
On May 10, 2:45 pm, John Machin <sjmac...@lexicon.netwrote:
On May 11, 4:52 am, kyoso...@gmail.com wrote:
On May 9, 5:12 pm, John Machin <sjmac...@lexicon.netwrote:
On May 10, 7:34 am, kyoso...@gmail.com wrote:
Hi,
I am writing a reminder program for our Zimbra email client. One of
the requirements I was given was to automatically increment or
decrement the display to show something like the following:
5 minutes until appointment
or
10 minutes past your appointment
Either way, as each minute goes by, I need to increment it or
decrement it. I am having trouble finding a coherent way to take the
same date and compare just the number of minutes between them to find
the difference. Like if I have an appointment at 9:30 a.m. and the app
is loaded at 8 a.m., I need to know the number of minutes or hours and
minutes until the appointment.
I have looked at the dateutils module and it has many comparison
methods, but they seem to only return the number of days or seconds.
Ermmm ... what's wrong with
minutes = seconds / 60.0
hours = minutes / 60.0
?
I'm sure there is a hack for doing something like what you suggest,
but it would be messy. The problem is that I get a datetime object
returned and division really isn't something you can do to one of
those objects. Besides, if I had seconds returned, I would want to
multiply by 60, not divide.
Maybe I misunderstand you.

Maybe it's mutual -- hack? messy? multiply? Where I come from, 180
seconds is (180 / 60 = 3) minutes. 180 seconds * 60 is 10800 sixtieths-
of-a-second, which appears to be travelling away from a solution to
your problem.

You have *TWO* datetime objects, (say) appt_dt and now_dt.

delta =appt_dt - now_dt # delta is a timedelta object.
# calculate difference in minutes
mins = delta.days * 24 * 60 + delta.seconds // 60

Have you not read Tim Golden's response?
Yeah. I said I felt stupid. I'm sorry. I was looking at the problem
from the wrong direction.

Mike

May 10 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.