1. ホーム
  2. ruby

[解決済み] Rubyで日付と時刻の変換を行う。

2022-06-06 05:57:26

質問

RubyでDateTimeとTimeオブジェクトをどのように変換するのですか?

どのように解決するのですか?

2つの微妙に異なる変換が必要です。

から変換するには Time から DateTime に変更すると、Timeクラスは以下のように修正されます。

require 'date'
class Time
  def to_datetime
    # Convert seconds + microseconds into a fractional number of seconds
    seconds = sec + Rational(usec, 10**6)

    # Convert a UTC offset measured in minutes to one measured in a
    # fraction of a day.
    offset = Rational(utc_offset, 60 * 60 * 24)
    DateTime.new(year, month, day, hour, min, seconds, offset)
  end
end

Dateと同様の調整で DateTime Time .

class Date
  def to_gm_time
    to_time(new_offset, :gm)
  end

  def to_local_time
    to_time(new_offset(DateTime.now.offset-offset), :local)
  end

  private
  def to_time(dest, method)
    #Convert a fraction of a day to a number of microseconds
    usec = (dest.sec_fraction * 60 * 60 * 24 * (10**6)).to_i
    Time.send(method, dest.year, dest.month, dest.day, dest.hour, dest.min,
              dest.sec, usec)
  end
end

ローカルタイムとGM/UTCタイムのどちらかを選択する必要があることに注意してください。

上記のコードスニペットは、いずれもO'Reillyの Ruby クックブック . このコードでは ポリシー はこれを許可しています。