簡體   English   中英

ArgumentError在Ruby版本1.8.6上創建Time類的實例

[英]ArgumentError creating instance of Time class on Ruby version 1.8.6

我正在嘗試使用視圖中的datetime_select獲取時間值,返回的值是:

"scheduletime"=>{"scheduletime(1i)"=>"2014", "scheduletime(2i)"=>"1", "scheduletime(3i)"=>"9", "scheduletime(4i)"=>"10", "scheduletime(5i)"=>"33"}

在控制器中我試圖使用datetime_select的返回值創建Time類的實例。 以下列方式。

schedule_time = Time.new(params[:scheduletime]["scheduletime(1i)"], params[:scheduletime]["scheduletime(2i)"], params[:scheduletime]["scheduletime(3i)"], params[:scheduletime]["scheduletime(4i)"], params[:scheduletime]["scheduletime(5i)"],0, "+09:00")

嘗試這個我得到以下錯誤。

ArgumentError (wrong number of arguments (7 for 0))

我使用的ruby版本是1.8.6。 任何人都可以告訴我哪里出錯了。

Ruby 1.8.6中的Time.new不允許任何參數。 請參閱官方文檔

a = Time.new      #=> Wed Apr 09 08:56:03 CDT 2003
b = Time.new      #=> Wed Apr 09 08:56:03 CDT 2003
a == b            #=> false
"%.6f" % a.to_f   #=> "1049896563.230740"
"%.6f" % b.to_f   #=> "1049896563.231466"

我的建議是使用Time.utc來創建一個給定參數的日期。

您可以使用Hash#valutes_at重寫代碼

Time.utc(*params[:scheduletime].values_at(%w( scheduletime(1i) scheduletime(2i) scheduletime(3i) scheduletime(4i) scheduletime(5i) )))

請注意, Time.utc也接受一個可選的時區(鑒於我看到你正在傳遞一個)。


作為旁注,您肯定需要升級您的Ruby版本。

文檔似乎指出您不能將參數傳遞給Time.new方法。

試試這個(將使用您當前的TimeZone):

schedule_time = Time.local(params[:scheduletime]["scheduletime(1i)"], params[:scheduletime]["scheduletime(2i)"], params[:scheduletime]["scheduletime(3i)"], params[:scheduletime]["scheduletime(4i)"], params[:scheduletime]["scheduletime(5i)"],0)

# some variants, using standard TimeZone:
Time.utc(2000,"jan",1,20,15,1)  #=> Sat Jan 01 20:15:01 UTC 2000
Time.gm(2000,"jan",1,20,15,1)   #=> Sat Jan 01 20:15:01 UTC 2000
Time.local(2000,"jan",1,20,15,1)   #=> Sat Jan 01 20:15:01 CST 2000

您可能希望在此之后將TimeZone設置為另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM