2016-01-08 24 views
0

我試圖寫一個類做一些數學與日期時間。在實際情況下,我收到DateTime是否是這樣的:日期時間比較和數學在Ruby中

2015-08-26T12:10:54Z 
2015-08-31T05:07:01Z 
2016-01-05T10:57:02Z 
2016-01-05T10:57:04Z 

我需要這些時間和比較它們與實際時間,大致是這樣的:

dif = time - Time.now 

然後我需要的結果上方和數學的看它是否超過45分鐘等於或大於,大致是這樣的:

threshold = 00:45:00 
if dif >= threshold 
    puts dif 
    #do something 
else 
    #do something else 
end 

通常的差異將使用同一天時間戳來計算,但很少它可能會面臨這樣就像從一天到另一天的過程一樣。

我測試了以下代碼:

irb(main):001:0> t1 = Time.now 
=> 2016-01-08 18:53:58 +0000 
irb(main):002:0> t2 = Time.now 
=> 2016-01-08 18:54:09 +0000 
irb(main):003:0> dif = t2.to_f - t1.to_f 
=> 10.176163911819458 

但我不能這個結果回頭一讀的時候,像00:00:11

什麼是做數學題,所以當代碼顯示它有像00:14:59正確的格式差異的最好方法?

+1

你看了[Ruby可以打印出時間差(持續時間)嗎?](http://stackoverflow.com/questions/1679266/can-ruby-print-out-time-difference-duration-readily)? –

+0

@WandMaker我剛剛看到它,我只是想知道是否有其他方式,比如使用Ruby內置方法或類似方法。但同時我會實施這個課程,看看它是否符合我的需求。謝謝。 –

回答

0

有一個Time庫,您可以要求,然後它會擴展默認的Time類有額外的方法,如#parse。

require 'time' 
t1 = Time.parse('2015-08-26T12:10:54Z') #trusting the heuristic to match this as ISO8601 type date 
t2 = Time.parse('2016-01-05T10:57:02Z') 

> t2 - t1 
=> 11400368.0 #difference in seconds 

由於現在時間以秒爲單位,您可以輕鬆檢查差分閾值45 * 60。但是,您必須非常小心地在兩個日期使用相同的時區。

你舉了一個例子與Time.now但它會從你的本地時區,而你所提供的日期在UTC來計算(與「Z」結尾)與UTC有沒有時區。減去他們可以給你不同的結果時,實行夏令時的時區有效或無效。

如果您在Time.now中檢查的每個日期都是UTC,則應該使用Time.now.utc代替。

要計算你可以使用Time.utc(0)爲基礎的時間差。

> Time.utc(0) 
=> 0000-01-01 00:00:00 UTC 
> Time.utc(0) + 11400368.0 
=> 0000-05-11 22:46:08 UTC 

你可以很容易地從這裏提取小時:分鐘:秒。

+0

這正是我一直在尋找。像魅力一樣工作!謝謝 –