MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: list of dates

  • To: mathgroup at smc.vnet.net
  • Subject: [mg88354] Re: list of dates
  • From: Szabolcs Horvát <szhorvat at gmail.com>
  • Date: Fri, 2 May 2008 06:03:40 -0400 (EDT)
  • Organization: University of Bergen
  • References: <fvegu1$5e9$1@smc.vnet.net>

Roger Nye wrote:
> Hi,
> I have a list of dates in the format YYYY-MM-DD and I want to convert them 
> to a decimal value, so 1963-01-01 goes to 63.0 and 1985-07-01 goes roughly 
> to 85.5.
> 
> Any suggestions on the best way to do this?

It is not possible to do this in a precise way because years don't pass 
"linearly".  Leap years are longer than non-leap years.  So we have to 
make a compromise:  if y1, y2, y3, and y4 are the floating point numbers 
you use to represent dates, it will either not be true that if (y2-y1) 
== (y4 - y3) then the time interval between y1 and y2 has the same 
length as the interval between y3 and y4;  or the date 19AB-01-01 might 
not be converted to the exact integer AB.

I chose the latter compromise, and wrote this function:


dateToFloat[date_String] :=
  N[100 DateDifference[{1900, 1, 1}, DateList[date]]/
    DateDifference[{1900, 1, 1}, {2000, 1, 1}]]

dateToFloat["1963-01-01"]

62.9997

dateToFloat["1985-07-01"]

85.4972

If you use different anchors than 1900-01-01 and 2000-01-01, then you'll 
get slightly different results.

I hope this helps,
Szabolcs


  • Prev by Date: Re: list of dates
  • Next by Date: Re: Inverse of symbolic matrix
  • Previous by thread: Re: Re: list of dates
  • Next by thread: Re: list of dates