2013-05-18 3 views
3

Я занимаюсь разработкой приложения с использованием Visual Ruby. В том, что я извлечение даты из выпадающего списка, как показано ниже:Использование метода DateTime в 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' 

Я не знаю, что делать здесь, может кто-нибудь помочь мне выйти из этого?

ответ

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 во втором аргументе strptime.

+0

спасибо большое за то, что сэкономил мое время .. преобразование его в целое, как вы сказали, выполнило эту работу .. :) – Abhiram

Смежные вопросы