Re: split a number to Date format
- To: mathgroup at smc.vnet.net
- Subject: [mg124275] Re: split a number to Date format
- From: "Hans Michel" <hmichel at cox.net>
- Date: Sun, 15 Jan 2012 04:51:08 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201201140754.CAA01282@smc.vnet.net>
Derek:
filterTS[dt_String] :=
Module[{y, m, d, h, mi, s}, {y, m, d, h, mi, s} =
Map[FromDigits, Partition[IntegerDigits[ToExpression[dt]], 2]];
y = y + 2000;
DateList[{y, m, d, h, mi, s}]
]
In[2]:= filterTS["111205020000"]
Out[2]= {2011, 12, 5, 2, 0, 0.}
Took advantage of the fact that the string format can be grouped by 2.
Hans
-----Original Message-----
From: Hans Michel [mailto:hmichel at cox.net]
Sent: Saturday, January 14, 2012 11:01 AM
To: 'Derek Martin'; 'mathgroup at smc.vnet.net'
Subject: [mg124275] Re: split a number to Date format
The nice thing about Regular Expression is that it has been around a while
now and there is a good place to go find tried, tested and sometimes well
documented pattern matching strings. I was very pleased when WRI introduced
Regular Expression in Mathematica. Even with Mathematica's (in their words
"powerful") pattern matching, I learned Regular Expressions some 6-7 years
before Mathematica came out. So I feel more comfortable around Regular
Expressions. As far as I know, I don't see an equivalent publically
available library of Mathematica pattern matching.
So I found a Regular Expression on this site
http://regexlib.com/REDetails.aspx?regexp_id=2641
This pattern match will match ISO 8601 date time format with or without the
delimiters.
Try
StringCases["111205020000",
RegularExpression[
"(\\d{2}|\\d{4})(?:\\-)?([0]{1}\\d{1}|[1]{1}[0-2]{1})(?:\\-)?([0-2]\
{1}\\d{1}|[3]{1}[0-1]{1})(?:\\s)?([0-1]{1}\\d{1}|[2]{1}[0-3]{1})(?::)?\
([0-5]{1}\\d{1})(?::)?([0-5]{1}\\d{1})"] -> "20$1,$2,$3,$4,$5,$6"]
or
d = "111205020000";
dl=
StringCases[d,RegularExpression["(\\d{2}|\\d{4})(?:\\-)?([0]{1}\\d{1}|[1]{1}
[0-2]{1})(?:\\-)?([0-2]{1}\\d{1}|[3]{1}[0-1]{1})(?:\\s)?([0-1]{1}\\d{1}|[2]{
1}[0-3]{1})(?::)?([0-5]{1}\\d{1})(?::)?([0-5]{1}\\d{1})"]->
"20$1,$2,$3,$4,$5,$6"];
dl
You may also translate the RE pattern matching to the faster Mathematica
String matching. I don't know how RE is implemented in Mathematica but I
would think it is probably slower than the older built in matching
techniques.
Also note that a 2 digit year poses a problem of what to use when the 2
digits is greater than current year. When do you use "19" or "20" to
designate century?
The result is a list but it needs further processing to get to a DateList.
You asked for help. This is what I could do with the time I had.
I will come back to it for a complete solution if time permits.
Hans
-----Original Message-----
From: Derek Martin [mailto:cdmartin at me.com]
Sent: Saturday, January 14, 2012 1:54 AM
To: mathgroup at smc.vnet.net
Subject: [mg124275] split a number to Date format
I have experimental data in spreadsheet format. The first column is a time
stamp in the format 111205020000.
If I could parse or split the number 111205020000 into {11,12,05,02,00,00}
and replace the first 11 with 2011, the Date commands would work fine. I can
do the replacing, but am having difficulty seeing how to split the number
into {11,12,05,02,00,00}.
DateString[{2011, 12, 05, 02, 00, 00}] gives
"Mon 5 Dec 2011 02:00:00"
Any help to convert my number to the right Date format would be appreciated.
I am using Mathematica 8.
Thanks in Advance
Derek
- References:
- split a number to Date format
- From: Derek Martin <cdmartin@me.com>
- split a number to Date format