Forum: Ruby Date Conversions

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Af95bdaf87958c40150b813e94381bfd?d=identicon&s=25 Christer Nilsson (christer)
on 2006-01-10 16:21
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
6d9bf78ca49a017e9e3e6b0357b6c59e?d=identicon&s=25 Peter Hickman (Guest)
on 2006-01-10 16:38
(Received via mailing list)
Christer Nilsson wrote:

>		second=s[10,2].to_i
>		month= s[2,2].to_i
>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.
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-10 16:38
(Received via mailing list)
Hi --

On Wed, 11 Jan 2006, Christer Nilsson wrote:

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

See Date.parse.


David

--
David A. Black
dblack@wobblini.net

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
Af95bdaf87958c40150b813e94381bfd?d=identicon&s=25 Christer Nilsson (christer)
on 2006-01-10 17:50
David A. Black wrote:
>
> 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
This topic is locked and can not be replied to.