0

私は2つのActiveSupport::TimeWithZoneオブジェクト、sayt1と。を持っていますt2t2の時間と分をの時間と分に一致させるための最良の方法は何ですかt1。たとえば、 2012年4月2日午後t13時45分、t22012年4月15日午後6時です。t22012年4月15日午後3時45分に変更したいと思います。

Timeオブジェクトでも機能するソリューションに満足しています。

私はこれまでにこれを持っています:

Time.zone.parse "#{t1.strftime "%Y-%m-%d"} #{t2.strftime "%H:%M:%S"}"

4

3 に答える 3

1

通常は、Time.mktimeを使用します。ただし、ActiveSupport::TimeWithZone全体は少し面倒です。ActiveSupport :: TimeWithZoneを使用すると、次のことをお勧めします。

t1 = Time.mktime(2012,4,15,18)
t2 = Time.mktime(2012,4,15,15,45)
t3 = Time.mktime(t1.year, t1.month, t1.day, t2.hour, t2.min, 0, 0, Time.zone.utc_offset).in_time_zone(Time.zone)

プレーンルビーでは、最初の部分を実行するだけです。

t1 = Time.mktime(2012,4,15,18)
t2 = Time.mktime(2012,4,15,15,45)
t3 = Time.mktime(t1.year, t1.month, t1.day, t2.hour, t2.min)

パフォーマンスの違いについては、mktime(.in_time_zoneのものを含む)はここでは約15倍高速です(Time.zone.parseは0.49ms、Time.mktimeは0.03msかかります)。

お役に立てば幸い

于 2012-04-13T23:41:03.900 に答える
1

これはそれを行う必要があります:

t2.change(hour: t1.hour, min: t1.min)

ドキュメンテーション。

于 2012-08-03T11:37:28.127 に答える
0

何をしようとしているのか正確にはわかりませんが、Timeオブジェクトを直接加算または減算できます(秒はデフォルトの時間単位ですが、この場合は関係ありません)。t2がTimeオブジェクトであるとすると、この単純なコードは、t1に一致する時間で更新されたt2を提供します。

t2 = 2012-04-15 18:00:00 -0400 # This is how a Time object is displayed in irb
t2 = t2 - (t2 - t1) # I did this in irb with require 'active_support', but it should work in Rails 3.x.

私はRailsに比較的慣れていないので、単純化しすぎている場合はご容赦ください。ただし、これで問題が解決することを願っています。

于 2012-04-13T21:56:05.147 に答える