[Rails5] ActiveSupport::Durationの期間処理メソッド(2)変換

こんにちは、hachi8833です。

Active Support探訪シリーズは前回「[Rails5] ActiveSupport::Durationの期間処理メソッド(1)演算、比較など」の続きです。

今回のメソッド

ActiveSupport::Durationは日付や時刻による期間(時点と時点の間の大きさ)を表現するライブラリです。

以下もご覧ください。

条件

変換系

ISO8601関連

メソッド 説明
#parse ISO8601形式の文字列からDurationオブジェクトを作成する
#iso8601 DurationオブジェクトをISO8601形式の文字列に変換する(precisition:で精度のフォーマットを指定できる)

2つのメソッドは互いに逆変換になっています。

使い方はテストコードを見るのが早いです。

ActiveSupport::Duration.parse("P1Y1MT8.55S") #=> 1 year, 1 month, and 8.55 seconds
aa.class                                     #=> ActiveSupport::Duration
aa.iso8601 precision: 3                      #=> "P1Y1MT8.550S"

秒への変換

メソッド 説明
#to_i Durationを秒(Integer)に変換する
#to_s Durationを秒(String)に変換する
1.minute.to_i   # => 60
1.hour.to_i     # => 3600
1.day.to_i      # => 86400

先々週の週刊Railsウォッチでもお伝えしましたが、現時点ではRails 5.0のstableとmaster(5.1になる予定)で月と年の日数の扱いが変わります

5.0 stable(古くなる)

  • 1か月: 30日
  • 1年: 365.25日
# 30.days.to_iと同等
1.month.to_i    # => 2592000

# 365.25.days.to_iと同等
1.year.to_i     # => 31557600

5.0 master(5.1になる予定)

  • 1か月: 1年の1/12
  • 1年: 365.2425日
# (1.year / 12).to_iと同等
1.month.to_i    # => 2629746

# 365.2425.days.to_iと同等
1.year.to_i     # => 31556952

注: 上は現状のRails 5.0 master + Ruby 2.5.0-devで確認しました。

その他の変換

メソッド 説明
#hash Object#hashを呼んでハッシュ値を得る
du = ActiveSupport::Duration.parse("P1Y1MT8.55S") #=> 1 year, 1 month, and 8.55 seconds
du.hash                                           #=> 3607471078652929564

このハッシュ値はHashクラスで使用できます。戻り値はRuby 2.4ではInteger、Ruby 2.3以前はFixnum#hashです。

#value#parts

※直接利用するものではないので参考までに。

メソッド 説明
#parts @partsへのアクセス
#value @valueへのアクセス

説明がまったくありませんが、@valueはDurationオブジェクトの1番目の引数、@partsは2番目の引数です。これについては別記事で追ってみたいと思います。

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

人気の記事