浏览 1203 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-12-29 关键字: ruby 计算时间差
经常我们有类似这样的需求,“时间差不大于3天时……”,那么用Ruby怎么计算时间差呢?这个问题困扰了我好几天,甚至产生了自己用函数去实现的想法,其实大可不必,因为ruby已经为我们做好咯。我用“ruby 时间差”关键字在百度没找到答案,最终用“ruby time diffrence" google到了答案。尊重版权,参考链接http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/169234
1、计算两个时间相差的天数 DateTime.parse("2007-12-28") - DateTime.parse("2007-12-26")=>2 2、计算两个时间相差的秒数 (DateTime.parse("Dec 2 03:12:19 2005") - DateTime.parse("Dec 2 14:44:47 2005")) * 24 * 60 * 60 =>-41548 上面例子中的字符串只要符合时间日期的形式就ok了,仅供需要的人参考 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-12-29
你可以借鉴一下Rails关于Ruby数值的扩展
比如以下例子: D:\workspaces\runwell>ruby script/console
Loading development environment (Rails 2.0.2)
>> 10.minutes.ago
=> Sat Dec 29 17:22:37 +0800 2007
>> 20.days.from_now
=> Fri Jan 18 17:32:56 +0800 2008
>> 10.months.until("2008-10-10 12:00:00".to_time)
=> Mon Dec 10 12:00:00 UTC 2007
>> 10.months.since("2001-10-10 12:00:00".to_time)
=> Sat Aug 10 12:00:00 UTC 2002
|
|
| 返回顶楼 | |
|
最后更新时间:2007-12-29
如果非常频繁计算时间差的话,建议用Time,因为Time要比DateTime效率来的高。
Time#to_i得到的值就是自epoc以来的秒数,此值可用做时间差的数学运算。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-01
用dateTime,直接'-'
today=DateTime.now yest=today.yesterday (today-yest).to_i ==>1 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-03
rubynroll 写道 如果非常频繁计算时间差的话,建议用Time,因为Time要比DateTime效率来的高。
Time#to_i得到的值就是自epoc以来的秒数,此值可用做时间差的数学运算。 可否这样:日期差用DateTime,其它时间差用Time。 仁兄“建议用Time,因为Time要比DateTime效率来的高”是怎么回事呢?? |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-04
主要原因可能是因为DateTime是纯Ruby写的,而Time是C写的。
以前看过一篇别人的blog谈到DateTime和Time的比较,不过今天却打不开链接了,我把他的两个benchmark测试代码帖上来,你可以试试在你的机器上两个性能差多少? 使用DateTime: #!/usr/bin/ruby
require 'date'
require 'benchmark'
include Benchmark
todays_date = DateTime.parse('Mon Feb 20 22:59:35 EST 2006')
yesterdays_date = DateTime.parse('Sun Feb 19 20:49:59 EST 2006')
difference = todays_date - yesterdays_date
hours,minutes,seconds,frac = DateTime.day_fraction_to_time(difference)
puts "#{hours}:#{minutes}:#{seconds}"
bm() do |x|
x.report('Date') {
500.times {
todays_date = DateTime.parse('Mon Feb 20 22:59:35 EST 2006')
yesterdays_date = DateTime.parse('Sun Feb 19 20:49:59 EST 2006')
difference = todays_date - yesterdays_date
hours,minutes,seconds,frac = DateTime.day_fraction_to_time(difference)
}
}
end
使用Time: #!/usr/bin/ruby
require 'time'
require 'benchmark'
include Benchmark
todays_date = Time.parse('Mon Feb 20 22:59:35 EST 2006')
yesterdays_date = Time.parse('Sun Feb 19 20:49:59 EST 2006')
difference = todays_date - yesterdays_date
minutes_to_add = difference.div(60)
seconds = difference.to_i.modulo(60)
hours = minutes_to_add.div(60)
minutes = minutes_to_add.modulo(60)
puts "#{hours}:#{minutes}:#{seconds}"
bm() do |x|
x.report('Date') {
500.times {
todays_date = Time.parse('Mon Feb 20 22:59:35 EST 2006')
yesterdays_date = Time.parse('Sun Feb 19 20:49:59 EST 2006')
difference = todays_date - yesterdays_date
minutes_to_add = difference.div(60)
seconds = difference.modulo(60)
hours = minutes_to_add.div(60)
minutes = minutes_to_add.modulo(60)
}
}
end
|
|
| 返回顶楼 | |






