Date Conversions

C

Christer Nilsson

There must be a better way of converting dates than this ugly mess ?

def convert_date format, s
case format
when "yymmddhhmmss"
year = s[0,2].to_i + 2000
month= s[2,2].to_i
day = s[4,2].to_i
hour = s[6,2].to_i
minute=s[8,2].to_i
second=s[10,2].to_i
Time.local(year,month,day,hour,minute,second)
when "yyyymmddhhmm"
year = s[0,4].to_i
month= s[4,2].to_i
day = s[6,2].to_i
hour = s[8,2].to_i
minute=s[10,2].to_i
Time.local(year,month,day,hour,minute)
when "ddmmyyhhmm"
day = s[0,2].to_i
month= s[2,2].to_i
year = s[4,2].to_i + 2000
hour = s[6,2].to_i
minute=s[8,2].to_i
Time.local(year,month,day,hour,minute)
when "yyyymmdd"
year = s[0,4].to_i
month= s[4,2].to_i
day = s[6,2].to_i
Time.local(year,month,day)
end
end

Christer
 
P

Peter Hickman

Christer said:
There must be a better way of converting dates than this ugly mess ?

def convert_date format, s
case format
when "yymmddhhmmss"
year = s[0,2].to_i + 2000
month= s[2,2].to_i
day = s[4,2].to_i
hour = s[6,2].to_i
minute=s[8,2].to_i
second=s[10,2].to_i
Time.local(year,month,day,hour,minute,second)
when "yyyymmddhhmm"
year = s[0,4].to_i
month= s[4,2].to_i
day = s[6,2].to_i
hour = s[8,2].to_i
minute=s[10,2].to_i
Time.local(year,month,day,hour,minute)
when "ddmmyyhhmm"
day = s[0,2].to_i
month= s[2,2].to_i
year = s[4,2].to_i + 2000
hour = s[6,2].to_i
minute=s[8,2].to_i
Time.local(year,month,day,hour,minute)
when "yyyymmdd"
year = s[0,4].to_i
month= s[4,2].to_i
day = s[6,2].to_i
Time.local(year,month,day)
end
end

Christer
I'm not too sure about the + 2000 part of the year calculation. It seems
to be missing the pivot.

The real problem is that there are so many different date formats and
none of them are *sensible*. You could write some fsm to parse the
string of "ymdhms" symbols and give yourself a pat on the back for your
coding skills or you could just use the code and get on with something
more interesting. As a point of note there is the question of the year
values, there should be an else clause to raise an error and there is no
checking that the values are sensible (or even numbers), does
format.size == s.size etc.

Yes to code looks ugly but I would be more concerned about the possible
errors than it not being /nice/.

Sometimes ugly is the best you can get.
 
C

Christer Nilsson

David said:
See Date.parse.

Thank you, David.
Your hint collapsed my code.
Christer

def convert_date format, s
raise "illegal date " + format + " " + s unless format.size == s.size
s = "20" + s if format[0,6]=="yymmdd"
s = "20" + s[4,2] + s[2,2] + s[0,2] + s[6,4] if
format[0,10]=="ddmmyyhhmm"
DateTime.parse(s)
end
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,655
Latest member
eizareri

Latest Threads

Top