Converting date format (CSV to yaml)

Hi,

Anyone know how to convert date format of .csv to . yaml?

.csv date format:

12/1/2011

.yaml date format:

2011-01-12

Nizam

Anyone know how to convert date format of .csv to . yaml?

.csv date format:

12/1/2011

.yaml date format:

2011-01-12

cdate = “12/1/2011”
m, d, y = cdate.split(’/’).map{|i| if i.length == 1 then “0#{i}” else i
end}
ydate = “#{y}-#{d}-#{m}”

The map part on the second line takes care of padding a single digit
month, and date with a ‘0’.

Anyone know how to convert date format of .csv to . yaml?

.csv date format:

12/1/2011

.yaml date format:

2011-01-12

Another option could be to parse the String into a Date that is then
naturally marshaled into the right format. That could help make the
intent of the code more clear than splitting and re-arranging by hand,
but note that Date.parse changed from Ruby 1.8 to Ruby 1.9.

Ruby 1.8
>> require ‘date’
=> true
>> require ‘yaml’
=> true
>> d = Date.parse(‘12/1/2011’)
=> #<Date: 4911793/2,0,2299161>
>> puts d.to_yaml
— 2011-12-01
=> nil

Ruby 1.9
>> require ‘date’
=> true
>> require ‘yaml’
=> true
>> d = Date.parse(‘12/1/2011’)
=> #<Date: 2011-01-12 (4911147/2,0,2299161)>
>> puts d.to_yaml
— 2011-01-12
=> nil

In practice, I sometimes just split it by hand, but I usually try to
use strptime:

Ruby 1.8 and 1.9:
>> d = Date.strptime(‘12/1/2011’, ‘%d/%m/%Y’)
=> #<Date: 2011-01-12 (4911147/2,0,2299161)>
>> puts d.to_yaml
— 2011-01-12
=> nil

On 02/02/2011 10:36 PM, Kamarulnizam R. wrote:

“2011-01-12”

How i change it to:
2011-01-12 <-- without the quotation mark

The pp method is adding the quotation marks when printing the string.
The quotes are not really in the string’s value. Try using puts instead
of pp to see the difference.

-Jeremy

On 02/02/2011 11:02 PM, Kamarulnizam R. wrote:

My yaml output:

  • type: TargetComponent
    title: None
    args:
    :start_date: “2010-08-10”
    :end_date: “2011-01-12”
    :state: Active

It’s because you actually have a String rather than a Date object. Try
this in irb:

ruby-1.9.2-p136 :001 > require ‘yaml’
=> true
ruby-1.9.2-p136 :002 > require ‘date’
=> false
ruby-1.9.2-p136 :003 > puts Date.today.to_yaml
— 2011-02-02
=> nil
ruby-1.9.2-p136 :004 > puts “2011-02-02”.to_yaml
— “2011-02-02”
=> nil

The command at :004 is what you’re doing, but you want what the command
at :003 is doing. Take the advice provided in the post linked below and
use Date objects to process your dates instead of Strings:

http://www.ruby-forum.com/topic/1005964#979296

-Jeremy

But when i tried transferring the ydate into my yaml structure, it still
print out the quotation marks.

{“type”=>“TargetComponent”,
“title”=>“None”,
“args”=>
{:start_date=>‘2010-08-10’,
:end_date=> (ydate),
:state=>"#{status}"}}]}

My yaml output:

  • type: TargetComponent
    title: None
    args:
    :start_date: “2010-08-10”
    :end_date: “2011-01-12”
    :state: Active

I used both method. Both of them return an error

 due_date = 12/1/2011
 date = Date.parse(due_date)
 #date = Date.strptime(due_date, '%d/%m/%Y')

C:/Ruby192/lib/ruby/1.9.1/date.rb:1022:in new_by_frags': invalid date (ArgumentError) from C:/Ruby192/lib/ruby/1.9.1/date.rb:1066:inparse’

 due_date = 12/1/2011
 #date = Date.parse(due_date)
 date = Date.strptime(due_date, '%d/%m/%Y')

C:/Ruby192/lib/ruby/1.9.1/date.rb:1022:in new_by_frags': invalid date (ArgumentError) from C:/Ruby192/lib/ruby/1.9.1/date.rb:1046:instrptime’

Is it because of my IDE?

Nizam

On Thu, Feb 3, 2011 at 6:14 AM, Kamarulnizam R.
[email protected] wrote:

.csv date format:

12/1/2011

.yaml date format:

2011-01-12

when csv reads the data, it’s still a string. you may want to convert
the string further to Date. in that case, use Date.strptime and pass
the string and it’s current format

eg in irb,

Date.strptime “12/1/2011”, “%d/%M/%Y”
#=> #<Date: 2011-01-12 (4911147/2,0,2299161)>

where %d stands for day, %M for month, and %Y for year
note, the format must match your string otherwise you’ll get errors
like invalid date…

best regards -botp

problem solved. thanks guys!!!

Hi,

I used the following code:

cdate = “2011-01-12”
m, d, y = cdate.split(’/’).map{|i| if i.length == 1 then “0#{i}” else i
end}
pp ydate = “#{y}-#{d}-#{m}”

Output:
“2011-01-12”

How i change it to:
2011-01-12 <-- without the quotation mark

Nizam