Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Comparing dates problem

Reply
Thread Tools

Comparing dates problem

 
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      05-09-2007
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

 
Reply With Quote
 
 
 
 
John Machin
Guest
Posts: n/a
 
      05-09-2007
On May 10, 7:34 am, (E-Mail Removed) 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

?



 
Reply With Quote
 
 
 
 
Tim Golden
Guest
Posts: n/a
 
      05-10-2007
http://www.velocityreviews.com/forums/(E-Mail Removed) 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
 
Reply With Quote
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      05-10-2007
On May 9, 5:12 pm, John Machin <(E-Mail Removed)> wrote:
> On May 10, 7:34 am, (E-Mail Removed) 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

 
Reply With Quote
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      05-10-2007
On May 10, 2:37 am, Tim Golden <(E-Mail Removed)> wrote:
> (E-Mail Removed) 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

 
Reply With Quote
 
Carsten Haese
Guest
Posts: n/a
 
      05-10-2007
On Thu, 2007-05-10 at 11:52 -0700, (E-Mail Removed) 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


 
Reply With Quote
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      05-10-2007
On May 10, 1:52 pm, (E-Mail Removed) wrote:
> On May 9, 5:12 pm, John Machin <(E-Mail Removed)> wrote:
>
>
>
> > On May 10, 7:34 am, (E-Mail Removed) 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...

 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      05-10-2007
On May 11, 4:52 am, (E-Mail Removed) wrote:
> On May 9, 5:12 pm, John Machin <(E-Mail Removed)> wrote:
>
>
>
>
>
>
>
> > On May 10, 7:34 am, (E-Mail Removed) 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?



 
Reply With Quote
 
kyosohma@gmail.com
Guest
Posts: n/a
 
      05-10-2007
On May 10, 2:45 pm, John Machin <(E-Mail Removed)> wrote:
> On May 11, 4:52 am, (E-Mail Removed) wrote:
>
>
>
> > On May 9, 5:12 pm, John Machin <(E-Mail Removed)> wrote:

>
> > > On May 10, 7:34 am, (E-Mail Removed) 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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
RFC-822 dates into Ruby dates kellygreer1 Ruby 1 06-08-2008 10:59 PM
Need to use dates earlier than 1900 (Time library says out of range for dates < 1900) me@benjaminarai.com Ruby 1 07-17-2007 02:25 PM
FAQ Dates; Opera Dates. Dr J R Stockton Javascript 0 06-18-2007 03:51 PM
Dates dates dates dates... SQL and ASP.NET David Lozzi ASP .Net 1 09-30-2005 02:18 PM
Dates! Dates! Dates! PW ASP General 4 08-09-2004 04:42 PM



Advertisments