2011-09-20 109 views
0

在做引發ArgumentError無效日期

startTime = DateTime.now 
startTime = startTime.change(:min => (startTime.min/5.to_f).ceil * 5) 

我們的生產服務器偶爾會產生以下異常

A ArgumentError occurred in controller#action: 

invalid date 
/opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/1.8/date.rb:1519:in `civil' 
vendor/bundle/ruby/1.8/gems/activesupport-3.0.9/lib/active_support/core_ext/date_time/calculations.rb:37:in `change' 

而我只是想不通是什麼原因造成的問題,也沒有重現它在我的開發環境。我做錯了什麼,或者這裏發生了什麼?我想要做的是創建一個DateTime實例,該實例從現在開始四捨五入到最接近的5分鐘。

回答

0

如果DateTime.now.min> 55,那麼你的最小值設置爲60

如果你只需要在部分時間:

startTime = DateTime.now 
new_minute = startTime.min/5.to_f).ceil * 5 
new_hour = DateTime.now.hour 

if new_minute == 60 
    new_minute = 0 
    new_hour = new_hour + 1 
end 

new_time = startTime.change(:min => new_minute, :hour => new_hour) 

如果你需要比這更多,我建議使用activesupport。然後,你可以讓我看到做

new_time = startTime + (new_minute - min).minutes 
+0

感謝。我的最終版本成爲 STARTTIME = DateTime.now.change(:秒=> 0); roundedMinutes =(startTime.min/5.0).ceil * 5; startTime =(startTime +(roundedMinutes-startTime.min).minutes); 這增加了「丟失」分鐘的時間(也修正第23天的變化:56-23:59),並設置秒爲0。 –

相關問題