Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > date diff calc

Reply
Thread Tools

date diff calc

 
 
tertius
Guest
Posts: n/a
 
      11-29-2004
Hi,

Is there a more pythonic way to write or do a date difference
calculation? I have as input two date fields in the form 'YYYY-MM-DD'

TIA
Terius



from datetime import date

bdl = '2004-11-25'.split('-')
edl = '2004-11-30'.split('-')
bd = date(int(bdl[0]), int(bdl[1]), int(bdl[2]))
ed = date(int(edl[0]), int(edl[1]), int(edl[2]))

print ed , '-', bd , '=', (ed-bd).days
 
Reply With Quote
 
 
 
 
Diez B. Roggisch
Guest
Posts: n/a
 
      11-29-2004
> bdl = '2004-11-25'.split('-')
> edl = '2004-11-30'.split('-')
> bd = date(int(bdl[0]), int(bdl[1]), int(bdl[2]))
> ed = date(int(edl[0]), int(edl[1]), int(edl[2]))


using time.strptime and datetime.date.fromtimestamp is surely the better
alternative, as it lets specify you the format by a string.

> print ed , '-', bd , '=', (ed-bd).days


I can't imagine what could possibly be easier than subtracting two dates -
in fact, most times one has to jump through much more hoops to achieve
these results, e.g. in java.

--
Regards,

Diez B. Roggisch
 
Reply With Quote
 
 
 
 
tertius
Guest
Posts: n/a
 
      11-29-2004
Diez B. Roggisch wrote:
>
> I can't imagine what could possibly be easier than subtracting two dates -
> in fact, most times one has to jump through much more hoops to achieve
> these results, e.g. in java.
>

I'll try that.

Thanks,
T
 
Reply With Quote
 
Skip Montanaro
Guest
Posts: n/a
 
      11-29-2004

tertius> Is there a more pythonic way to write or do a date difference
tertius> calculation? I have as input two date fields in the form
tertius> 'YYYY-MM-DD'

How about:

import datetime
import time

bd = "2004-11-25"
ed = "2004-11-30"

start = datetime.date.fromtimestamp(time.strptime("%Y-%m-%d", bd))
end = datetime.date.fromtimestamp(time.strptime("%Y-%m-%d", ed))

print ed , '-', bd , '=', (end-start).days

I think that for completeness' sake it would be nice if datetime exposed a
fromstring method which accepted a string representing a date and a format
specifier, e.g.:

start = datetime.date.fromstring("%Y-%m-%d", "2004-11-25")
end = datetime.date.fromstring("%Y-%m-%d", "2004-11-30")

(Maybe it should be called "strptime", since that's the call it's saving.)

The datetime.date object already exposes a strftime method for generating a
formatted string output and will create date objects from both time.time()
output (fromtimestamp) and "proleptic Gregorian ordinal"s (fromordinal).
Looking at the datetime module docs, it's not at all obvious to me that the
latter would be used all that often. I think inputs from strings would be
much more common.

Skip
 
Reply With Quote
 
Rick Holbert
Guest
Posts: n/a
 
      11-29-2004
Here's how to do it as a one-liner:

python -c "import datetime; import time; print 'Only %d days until
Christmas' % (datetime.date(2004, 12, 25) -
datetime.date.fromtimestamp(time.time())).days"

Here's a slightly shorter way of doing it:

python -c "import time; print 'Only %f more days until Christmas' %
(float(time.mktime(time.strptime('2004-12-25', '%Y-%m-%d')) -
time.time()) / 86400)"
 
Reply With Quote
 
Tim Peters
Guest
Posts: n/a
 
      11-30-2004
[Skip Montanaro]
> ...
> The datetime.date object already exposes a strftime method for
> generating a formatted string output and will create date objects
> from both time.time() output (fromtimestamp) and "proleptic
> Gregorian ordinal"s (fromordinal). Looking at the datetime module
> docs, it's not at all obvious to me that the latter would be used all
> that often.


Then the part of the docs you're overlooking is the part explaining
that "Calendrical Calculations" bases all its calendar conversions on
proleptic Gregorian ordinals. They're for people who want something
other than the Gregorian calendar, and want it enough to write some
code.

> I think inputs from strings would be much more common.


Me too, although it's a bottomless pit.

guess-6-intended-meanings-for-1/2/3-before-breakfast-ly y'rs
 
Reply With Quote
 
Peter Hansen
Guest
Posts: n/a
 
      11-30-2004
Tim Peters wrote:
> [Skip Montanaro]
>>I think inputs from strings would be much more common.

>
> Me too, although it's a bottomless pit.
>
> guess-6-intended-meanings-for-1/2/3-before-breakfast-ly y'rs


I think Skip was intending that the format string be mandatory,
to avoid such ambiguity. At least, that's what I inferred from
his example, where the format string came before the date string:

start = datetime.date.fromstring("%Y-%m-%d", "2004-11-25")

-Peter
 
Reply With Quote
 
Tim Peters
Guest
Posts: n/a
 
      11-30-2004
[Skip Montanaro]
>>> I think inputs from strings would be much more common.


[Tim Peters]
>> Me too, although it's a bottomless pit.
>>
>> guess-6-intended-meanings-for-1/2/3-before-breakfast-ly y'rs


[Peter Hansen]
> I think Skip was intending that the format string be mandatory,
> to avoid such ambiguity. At least, that's what I inferred from
> his example, where the format string came before the date string:
>
> start = datetime.date.fromstring("%Y-%m-%d", "2004-11-25")


It's still a bottomless pit -- ask Brett, who implemented the Python
strptime <wink>. But now that we *have* a portable strptime
implementation, perhaps it would be OK to teach datetime about it.

OTOH, is that what people really want? For all I know,
rfc822.getdate() or rfc822.getdate_tz() are what's really wanted, or
maybe some DWIM thing like Zope's date guessers.

Does anyone want any of those enough to write the code, tests, and
docs? If so, the first person to do so will probably win the debate
....
 
Reply With Quote
 
Peter Hansen
Guest
Posts: n/a
 
      11-30-2004
Tim Peters wrote:
> [Peter Hansen]
>>I think Skip was intending that the format string be mandatory,
>>to avoid such ambiguity.

>
> It's still a bottomless pit -- ask Brett, who implemented the Python
> strptime <wink>.


True, I did overlook timezones at the time.

On the other hand, that's because *my* use cases for "simple"
fromstring() behaviour are all involving local time. When
I'm interested in non-local time, I would be happy having
to specify that behaviour in a more complex manner.

> OTOH, is that what people really want? For all I know,
> rfc822.getdate() or rfc822.getdate_tz() are what's really wanted, or
> maybe some DWIM thing like Zope's date guessers.


To each his own, although I think there's a hope here that
for those who might need/want a really simple solution,
95% of people have this in mind (pseudo-code):

class datetime.date:
def fromstring(format, string):
ts = time.mktime(time.strptime(string, format))
return datetime.date.fromtimestamp(ts)

The .fromtimestamp() methods already work only for local
time, and I haven't heard anyone complaining about that
either. (Hmm... haven't been listening either though.

-Peter
 
Reply With Quote
 
David Fraser
Guest
Posts: n/a
 
      12-02-2004
Peter Hansen wrote:
> Tim Peters wrote:
>
>> [Peter Hansen]
>>
>>> I think Skip was intending that the format string be mandatory,
>>> to avoid such ambiguity.

>>
>>
>> It's still a bottomless pit -- ask Brett, who implemented the Python
>> strptime <wink>.

>
>
> True, I did overlook timezones at the time.
>
> On the other hand, that's because *my* use cases for "simple"
> fromstring() behaviour are all involving local time. When
> I'm interested in non-local time, I would be happy having
> to specify that behaviour in a more complex manner.
>
>> OTOH, is that what people really want? For all I know,
>> rfc822.getdate() or rfc822.getdate_tz() are what's really wanted, or
>> maybe some DWIM thing like Zope's date guessers.

>
>
> To each his own, although I think there's a hope here that
> for those who might need/want a really simple solution,
> 95% of people have this in mind (pseudo-code):
>
> class datetime.date:
> def fromstring(format, string):
> ts = time.mktime(time.strptime(string, format))
> return datetime.date.fromtimestamp(ts)
>


Hear, hear, the above would be great!
 
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
ruby calc.rb or just calc.rb Kaye Ng Ruby 7 07-28-2010 05:21 AM
how to get tomorrow date using Date::CALC Bob Perl Misc 1 09-01-2005 12:56 PM
Diff CSS styles for diff INPUT TYPE='s? A Traveler ASP .Net 6 08-31-2004 09:17 PM
diff Process under diff users Cyril Vi?ville Perl 1 06-29-2004 06:22 PM
Same sessionID retuned to diff browsers in diff machines Berrucho ASP .Net 2 12-05-2003 02:23 PM



Advertisments