Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: Converting Dates to Mathematica Format

  • To: mathgroup at smc.vnet.net
  • Subject: [mg52087] Re: [mg52070] Converting Dates to Mathematica Format
  • From: János <janos.lobb at yale.edu>
  • Date: Wed, 10 Nov 2004 04:45:31 -0500 (EST)
  • References: <200411090637.BAA22852@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On Nov 9, 2004, at 1:37 AM, Gregory Lypny wrote:

> Hello Everyone,
>
> Is there a simple way to convert dates imported as "Day/Month/Year" to
> the Mathematica format of {Year, Month, Day}?  My dates are one column
> in a matrix of data.  Mathematica appears to be treating them as
> strings.  I used StringReplace to turn 15/10/2004 to 15,10,2004 but it
> remains a string, of course.
>
> Any suggestions would be most appreciated.  My alternative is to import
> all of the dates as 20041510 so the ordinal ranking is maintained by
> date calculations would not be possible.
>
> 	Greg
>
>

I had a similar problem.  I had time data in the format of "17:06:45".   
I converted them into seconds to do calculation with them:

{ToExpression[StringTake[#[[
         1]],{1,2}]]*3600+ToExpression[StringTake[#[[1]],{4,
        
5}]]*60+ToExpression[StringTake[#[[1]],{7,8}]],ToExpression[StringTake[# 
\
[[2]],{1,2}]]*3600+ToExpression[StringTake[#[[2]],{4,5}]]*60+ToExpressio 
n[
           StringTake[#[[2]],{7,8}]]}

So you just have to slice the date and convert the parts with  
ToExpression.  So if I would have datum="15/10/2004" then I would do  
something like:

In[181]:=
datum = "15/10/2004"
Out[181]=
"15/10/2004"

In[182]:=
stringToDate[d_String] :=
   {ToExpression[StringTake[d,
      {7, 10}]], ToExpression[
     StringTake[d, {4, 5}]],
    ToExpression[StringTake[d,
      {1, 2}]]}

Then if I add an arbitrary time fraction to the converted datum

In[186]:=
Join[stringToDate[datum],
   {1, 1, 1}]
Out[186]=
{2004, 10, 15, 1, 1, 1}

I am able to use it with FromDate

In[187]:=
FromDate[%]
Out[187]=
3306790861


So, if I have a vector of those dates

In[234]:=
dateVector = Table[StringJoin[
      ToString[Random[Integer,
        {1, 28}]], "/",
      ToString[Random[Integer,
        {1, 12}]], "/",
      ToString[Random[Integer,
        {2000, 2004}]]],
     {i, 1, 50}];

and the modified converter function is:

In[235]:=
stringToDate2[d_String] :=
   {ToExpression[StringTake[d,
      StringPosition[d, "/"][[
        2,1]] + {1, 4}]],
    ToExpression[StringTake[d,
      StringPosition[d, "/"][[
        1,1]] +
       If[StringPosition[d,
           "/"][[2,1]] -
          StringPosition[d,
           "/"][[1,1]] == 3,
        {1, 2}, {1, 1}]]],
    ToExpression[StringTake[d,
      StringPosition[d, "/"][[
        1,1]] +
       If[StringPosition[d,
           "/"][[1,1]] == 3,
        {-2, -1}, {-1, -1}]]]}

to account for single digit days and months :), then you can use Map to  
convert all of them at once like:

In[236]:=
(stringToDate2[#1] & ) /@
   dateVector
Out[236]=
{{2004, 12, 1}, {2004, 6,
    26}, {2004, 5, 27},
   {2003, 3, 2}, {2002, 9,
    18}, {2002, 9, 12},
   {2003, 3, 5}, {2003, 2,
    23}, {2001, 7, 23},
   {2000, 2, 22}, {2001, 4,
    12}, {2001, 3, 12},
   {2001, 4, 8}, {2003, 3,
    10}, {2004, 10, 24},
   {2000, 10, 18}, {2002, 8,
    7}, {2000, 11, 10},
   {2003, 3, 13}, {2002, 8,
    25}, {2004, 6, 16},
   {2004, 7, 13}, {2004, 2,
    19}, {2003, 6, 17},
   {2003, 5, 12}, {2001, 2,
    27}, {2003, 10, 5},
   {2000, 4, 18}, {2001, 6,
    24}, {2003, 3, 10},
   {2003, 3, 4}, {2003, 8,
    28}, {2002, 10, 20},
   {2001, 7, 7}, {2003, 4,
    20}, {2004, 5, 19},
   {2003, 7, 14}, {2001, 4,
    1}, {2002, 12, 20},
   {2003, 7, 28}, {2003, 6,
    23}, {2003, 1, 14},
   {2002, 7, 27}, {2004, 5,
    11}, {2004, 2, 28},
   {2001, 10, 13}, {2001, 12,
    10}, {2000, 3, 12},
   {2001, 7, 15}, {2001, 3,
    24}}

I hope it helps.

János
----------------------------------------------
Trying to argue with a politician is like lifting up the head of a  
corpse.
(S. Lem: His Master Voice)


  • Prev by Date: Re: Re: NonlinearFit problem
  • Next by Date: Re: Re: need help with integration
  • Previous by thread: Converting Dates to Mathematica Format
  • Next by thread: Re: Converting Dates to Mathematica Format