0

私は Jumpstart Lab の Event Manager の問題を処理していて、時刻の問題が発生しました。推奨される方法 #strparse は、最初の入力でこの問題を引き起こす完全な非スターターだったので、DT.parse() と #strftime を調べて使用しました。わかるでしょ。

Win 7およびOSX 10.7でこれを試しました。両方とも Ruby 1.9.3

require "csv"
require 'date'

contents = CSV.open "C:\\Users\\...\\Desktop\\event_manager\\event_attendees.csv", headers: true,         header_converters: :symbol


def time_of_day(row, id)
    raw_date = row[:regdate]
    if raw_date[-5] == ' ' #Thought the problem might be related to padding
        #raw_date = raw_date.insert(-5, '0')
        return time_of_day_2(raw_date, id)

    end
    p raw_date + " ID: #{id}"
    new_date = DateTime.parse(raw_date) #Line 48
    new_date = new_date.strftime('%l:%M %p')
    new_date +  "ID: #{id}"
end                            


def time_of_day_2(raw_date, id)
    p raw_date + " ID: #{id}"
    '00:00'
end

contents.each do |row|
    name = row[:first_name].capitalize
id = row[0] 
    time_of_day = time_of_day(row, id) #Line 71
    p time_of_day
end

そして、これが結果でした:

"11/12/08 10:47 ID: 1"
"10:47 AM ID: 1"
C:/Users/.../Desktop/event_manager/lib/event_manager.rb:48:in `parse"11/12/08 13:23 ID: 2" #I don't know why it prints this up here
" 1:23 PM ID: 2"
"11/12/08 13:30 ID: 3"
" 1:30 PM ID: 3"
"11/12/08 14:04 ID: 4"
" 2:04 PM ID: 4"
"11/12/08 14:46 ID: 5"
" 2:46 PM ID: 5"
"11/12/08 15:00 ID: 6"
" 3:00 PM ID: 6"
"11/12/08 16:05 ID: 7"
" 4:05 PM ID: 7"
"11/12/08 17:18 ID: 8"
" 5:18 PM ID: 8"
"11/13/08 1:32 ID: 9"
"00:00"
"11/13/08 16:40 ID: 10"
': invalid date (ArgumentError)
    from C:/Users/.../Desktop/event_manager/lib/event_manager.rb:48:in `time_of_day'
    from C:/Users/.../Desktop/event_manager/lib/event_manager.rb:71:in `block in <main>'
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/csv.rb:1792:in `each'
    from C:/Users/.../Desktop/event_manager/lib/event_manager.rb:59:in `<main>'
[Finished in 2.7s with exit code 1]

前もって感謝します

4

1 に答える 1

0

DateTime.parse11/13/08YY/MM/DD として解釈されます。13月はありません。

日付/時刻の解析形式をより適切に制御するために、POSIX 形式のコードDatetime::strptimeを実装するものを使用します。strptime(3)

> DateTime.strptime('11/13/08 16:40','%m/%d/%y %H:%M')
=> #<DateTime: 2008-11-13T16:40:00+00:00 ((2454784j,60000s,0n),+0s,2299161j)>
于 2013-04-03T15:31:09.783 に答える