14

C#にはTimeSpanクラスがあります。これは期間を表し、多くの日付操作オプションから返されます。1つ作成して、日付などに加算または減算できます。

Ruby、特にレールでは、日付と時刻のクラスがたくさんあるようですが、期間を表すものは何もありませんか?

理想的には、標準の日付フォーマットオプションを使用してフォーマットされた日付を簡単に出力するために使用できるオブジェクトが必要です。

例えば。

ts.to_format("%H%M")

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

私が次のようなことができればさらに良いでしょう

   ts = end_date - start_date

2つの日付を引くと、その日付を分離する秒数が発生し、それからすべてを計算できることを認識しています。

4

5 に答える 5

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"
于 2012-06-19T12:21:11.763 に答える
3

このようなもの?https://github.com/abhidsm/time_diff

require 'time_diff'
time_diff_components = Time.diff(start_date_time, end_date_time)
于 2012-06-19T12:25:42.433 に答える
1

結局、私は@toklandの答えで提案をフォークしました。それを適切な宝石にする方法はよくわかりませんが、現在私のために働いています:

time_diffのタイムスパンフォーク

于 2012-06-20T02:45:20.537 に答える
1

いいえ、そうではありません。秒を追加するか、advanceメソッドを使用できます。

end_date - start_dateFloatタイプがあります

于 2012-06-19T12:21:29.647 に答える
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
于 2013-08-08T01:51:04.667 に答える