在C#中有一个TimeSpan类。它表示一段时间,并从许多日期操作选项返回。您可以创建一个并添加或减去日期等。
在Ruby中,特别是rails,似乎有很多日期和时间类,但没有代表一段时间的东西?
理想情况下,我想要一个可以使用标准日期格式选项轻松输出格式化日期的对象。
例如
ts.to_format("%H%M")
有这样的课吗?
如果能做类似
的事情,那就更好了 ts = end_date - start_date
我知道减去两个日期会导致分隔所述日期的秒数,并且我可以从中完成所有日期。
答案 0 :(得分:6)
你可以做类似的事情:
irb(main):001:0> require 'time' => true
irb(main):002:0> initial = Time.now => Tue Jun 19 08:19:56 -0400 2012
irb(main):003:0> later = Time.now => Tue Jun 19 08:20:05 -0400 2012
irb(main):004:0> span = later - initial => 8.393871
irb(main):005:0>
这只返回一个以秒为单位的时间,但是你可以使用strftime()
函数使它看起来漂亮:
irb(main):010:0> Time.at(span).gmtime.strftime("%H:%M:%S") => "00:00:08"
答案 1 :(得分:3)
这样的东西? https://github.com/abhidsm/time_diff
require 'time_diff'
time_diff_components = Time.diff(start_date_time, end_date_time)
答案 2 :(得分:1)
不,它没有。您只需添加秒或使用advance
方法。
end_date - start_date
将Float
类型
答案 3 :(得分:1)
最后,我在@ tokland的回答中提出了这个建议。不太确定如何使它成为一个合适的宝石,但它目前正在为我工作:
答案 4 :(得分:0)
还没有@toxaq ......但我已经开始了!
https://gist.github.com/thatandyrose/6180560
class TimeSpan
attr_accessor :milliseconds
def self.from_milliseconds(milliseconds)
me = TimeSpan.new
me.milliseconds = milliseconds
return me
end
def self.from_seconds(seconds)
TimeSpan.from_milliseconds(seconds.to_d * 1000)
end
def self.from_minutes(minutes)
TimeSpan.from_milliseconds(minutes.to_d * 60000)
end
def self.from_hours(hours)
TimeSpan.from_milliseconds(hours.to_d * 3600000)
end
def self.from_days(days)
TimeSpan.from_milliseconds(days.to_d * 86400000)
end
def self.from_years(years)
TimeSpan.from_days(years.to_d * 365.242)
end
def self.diff(start_date_time, end_date_time)
TimeSpan.from_seconds(end_date_time - start_date_time)
end
def seconds
self.milliseconds.to_d * 0.001
end
def minutes
self.seconds.to_d * 0.0166667
end
def hours
self.minutes.to_d * 0.0166667
end
def days
self.hours.to_d * 0.0416667
end
def years
self.days.to_d * 0.00273791
end
end