🙄

ActiveSupport の Time#to_fs, to_formatted_s で指定できるフォーマット

2024/09/26に公開

ActiveSupport では Time#to_fs が定義されており、以下のように Time オブジェクトからフォーマットを指定して文字列に変換することができます。

time = Time.parse("2024-10-06 17:59:12.136189821 +0900")

# cfc822 形式で文字列に変換
pp time.to_fs(:rfc822)    # => "Sun, 06 Oct 2024 17:59:12 +0900"

# iso8601 形式で文字列に変換
pp time.to_fs(:iso8601)   # => "2024-10-06T17:59:12+09:00"

Time#to_fs に渡せる値

Time#to_fs に渡せる値は Time::DATE_FORMATS で定義されています。
参照: https://github.com/rails/rails/blob/v7.2.1/activesupport/lib/active_support/core_ext/time/conversions.rb#L8-#L26

引数 フォーマット
:db %Y-%m-%d %H:%M:%S 2024-10-06 17:59:12
:inspect %Y-%m-%d %H:%M:%S.%9N %z 2024-10-06 17:59:12.136189821 +0900
:number %Y%m%d%H%M%S 20241006175912
:nsec %Y%m%d%H%M%S%9N 20241006175912136189821
:usec %Y%m%d%H%M%S%6N 20241006175912136189
:time %H:%M 17:59
:short %d %b %H:%M 06 Oct 17:59
:long %B %d, %Y %H:%M October 06, 2024 17:59
:long_ordinal proc October 6th, 2024 17:59
:rfc822 proc Sun, 06 Oct 2024 17:59:12 +0900
:iso8601 time.iso8601 2024-10-06T17:59:12+09:00

NOTE: long_ordinal rfc822 に関しては proc で動的に値を変換しています

こんな感じで必要に応じてフォーマットを調整することができます。

GitHubで編集を提案

Discussion