2012-06-19 9 views
11

C#ではのTimeSpanクラスがあります。これは一定期間を表し、多くの日付操作オプションから返されます。あなたは1を作成した日から加算または減算などRubyはC#でTimeSpanと同等の機能を持っていますか?

をRubyでは、具体的に日付と時刻のクラスが、時間のスパンを表し、何の多くがあるように思われるレールができますか?

理想的には私は私は十分に簡単にフォーマットされた日付を出力する標準の日付書式オプションを使用するために使用できるオブジェクトをしたいと思います。

例えば、

ts.to_format("%H%M") 

このようなクラスはありますか?私は

ts = end_date - start_date 

ような何かを行うことができれば

はしても良いだろう、私は分離する秒数に二つの日付の結果を差し引くことを承知しています日付と私はそれからそれをすべてをうまく可能性があるという。

答えて

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" 
+0

これは、私は現時点ではやっている正確に何であることを起こります。 24時間以上の時間差を表示できないという制限があります。時間@toxaq – toxaq

+0

は、実際に名前を与え、混乱することができる日付と時刻の抽象化、です。指定した年/月/日/時/分/秒のTimeオブジェクトを作成し、それらに対して加減算を実行することができます。 http://www.ruby-doc.org/core-1.9.3/Time.html –

+0

それはしかしタイムスパンについての興味深いことだ、それはそれの概念は、何か他のものを基準とした場所ですしていません。それは、いくつかの素敵なアクセサメソッドで栄光のintです。 – toxaq

1

いいえ、それはしていません。秒を追加するか、advanceメソッドを使用するだけです。

end_date - start_dateは、このようなFloatタイプ

3

何かを持っているのだろうか?

require 'time_diff' 
time_diff_components = Time.diff(start_date_time, end_date_time) 
+0

本当にありがとう、あなたに感謝します。私が望んでいたものではありませんが、私は間違いなくそれまたは派生物を扱うことができます。 – toxaq

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 
+0

クールで、宝石のトンクランドで起こっていることと非常によく似ています。 – toxaq

関連する問題