我想創建一個20分鐘10秒的DateTime實例。 我在irb中嘗試了Time和DateTime,但似乎無法找出真正有意義的方法。我只能將日期添加到DateTime對象,並且只向Time對象添加秒。ruby中的時間操作
沒有比總是將我想要添加的時間轉換爲秒的更好方法嗎?
我想創建一個20分鐘10秒的DateTime實例。 我在irb中嘗試了Time和DateTime,但似乎無法找出真正有意義的方法。我只能將日期添加到DateTime對象,並且只向Time對象添加秒。ruby中的時間操作
沒有比總是將我想要添加的時間轉換爲秒的更好方法嗎?
A Time
是秒數sin一個時代,而一個DateTime
是一個時代以來的天數,這就是爲什麼將1
加到DateTime
增加一整天的原因。但是,您可以添加分數一天,例如
d = DateTime.now
d + Rational(10, 86400)
將增加10秒d
(因爲有86400秒天)。
如果您使用Rails,的ActiveSupport添加一些輔助方法,你可以做
d + 20.minutes + 10.seconds
這將做正確的事情是d
是DateTime
或Time
。你可以自己使用ActiveSupport,現在你可以只需要一點點就可以了。我似乎記得這個東西在activesupport/duration
。我相信還有其他一些可以提供時間處理幫助的寶石。
好,界面簡單明瞭:
t = Time.now
t + (20 * 60 + 10)
如果你想擁有的東西方便,你可以添加方法到Time
類:
class Time
def add_minutes(m)
self + (60 * m)
end
end
但我不認爲這更簡單:
t = Time.now
t.add_minutes(20) + 10
OP想要日期時間,而不是時間。 – steenslag 2012-04-08 10:23:17
假設您需要ActiveSupport或者您正在使用Rails項目。一個非常簡單的易讀的方式在Ruby來做到這一點:
DateTime + 5.minutes
Time + 5.minutes
與.seconds, .hours, .days, .weeks, .month, .years
請注意,這假定你有ActiveSupport或Rails。 – 2012-04-07 17:11:59
感謝您的信息 - 我認爲這是ruby的標準行爲 – alex 2012-04-07 17:14:25
而且工作只是用積極支持時間延長。與試圖手動操作相比,它們非常方便且不易出錯。你可以只導入模塊,您需要:
# gem 'activesupport'
require 'active_support/core_ext/numeric/time.rb'
DateTime.now + 20.minutes
NB:是的,這違背了住來自第三方庫走的StackOverflow上黨的路線,但你不應該避免使用圖書館時,他們實際上標準,顯着降低您的風險,並提供更好的代碼清晰度。
就我個人而言,我更喜歡寫出'60 * 60 * 24',以使它在幻數來自哪裏時更加明顯,即使它在運行時顯然會稍微慢一些。 – 2012-04-07 17:11:13
@AndrewMarshall同意,除非一個人執行這個'DateTime'操作數百萬次,否則兩個乘法操作不值得*微優化*。除非遇到性能問題,否則不要考慮它。更好的是,如何在代碼開始時聲明一個常量? 'SECONDS_PER_DAY = 60 * 60 * 24',並使用它。對於'MINUTERS_PER_DAY = 60 * 24'和'HOURS_PER_DAY = 24'可以做同樣的事情,雖然最後一個沒有必要,但是最好保持一致並列出全部。 – 2016-01-18 16:20:44