3

Visual Ruby を使用してアプリケーションを開発しています。その中で、以下のようなドロップダウンから日付を取得しています:

check_to_in_1 = @builder.get_object("cellrenderertext7")

split次に、メソッドを使用してこの日付を分割します。

date_split = check_to_in_1.text.to_s.split("/")

String日付をフォーマットに変換したいので、この分割を行います。分割DateTime後、以下のように値を出力します。

puts "#{date_split[2]}"  # => 05
puts "#{date_split[1]}"  # => 10
puts "#{date_split[0]}"  # => 2013

この値をDateTime.newメソッドに渡して、次のように変換しDateTimeます。

check_to_in_time_converted = DateTime.new(date_split[0], 
                                          date_split[1], date_split[2])

ここで、次のエラーが発生しました。

C:/Users/abhiram/visualruby/examples/fedena/bin/SendAbsentees.rb:213:in `new': undefined method `div' for "05":String
 from C:/Users/abhiram/visualruby/examples/fedena/bin/SendAbsentees.rb:213:in `button1_clicked'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/gtk2-1.2.1-x86-mingw32/lib/gtk2/base.rb:95:in `call'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/gtk2-1.2.1-x86-mingw32/lib/gtk2/base.rb:95:in `block in __connect_signals__'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `call'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `main'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `show_window'
 from C:/Users/abhiram/visualruby/examples/fedena/bin/SendAbsentees.rb:99:in `show'
 from C:/Users/abhiram/visualruby/examples/fedena/bin/Control.rb:36:in `button2_clicked'
 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/gtk2-1.2.1-x86-mingw32/lib/gtk2/base.rb:95:in `call'

ここからどうすればいいのかわからないのですが、誰か助けてくれませんか?

4

1 に答える 1

3

コール スタック トレースで読み取ることができるように、定義されていない文字列DateTime.newにメソッドを送信しています。div"05"

[...]/bin/SendAbsentees.rb:213:in `new': undefined method `div' for "05":String

これは、DateTime.new整数を引数として期待するためです。date_splitに渡す前に、の要素を整数に変換する必要がありますDateTime.new

DateTime.new(*date_split.map(&:to_i))

次のように、DateTime.strptime代わりにを使用して、文字列を分割せずにそれを行うことができます。DateTime.new

DateTime.strptime(check_to_in_1.text.to_s, '%Y/%m/%d')
# => #<DateTime: 2013-05-10T00:00:00+00:00 ((2456423j,0s,0n),+0s,2299161j)>

日付が YEAR/MONTH/DAY の形式であると仮定しました。代わりに YEAR/DAY/MONTH の形式である場合は、交換する必要が%mあり%d、2 番目の引数でstrptime.

于 2013-05-18T09:52:39.183 に答える