浏览 12771 次
锁定老帖子 主题:ruby 计算时间差
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-29
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/169234
经常我们有类似这样的需求,“时间差不大于3天时……”,那么用Ruby怎么计算时间差呢?这个问题困扰了我好几天,甚至产生了自己用函数去实现的想法,其实大可不必,因为ruby已经为我们做好咯。我用“ruby 时间差”关键字在百度没找到答案,最终用“ruby time diffrence" google到了答案。尊重版权,参考链接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了,仅供需要的人参考 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |