[Ruby/Rails] strptimeのよく使うテンプレート

こんにちは、hachi8833です。昨日のstrftimeテンプレート記事に続き、strptimeのよく使うオプションをテンプレート用にまとめてみました。

query

160914_1648_wKvt8f

注意: コード例はすべてRuby 2.3.1の場合です。

RailsであればActiveSupportを使うことが多いと思いますが、タイムゾーンの扱いに注意する必要があります。

参考: Rails4のタイムゾーン、時間周り、ActiveSupportの補足的なメモ

strptime

Time.strptimeは、日時を表す文字列をTimeオブジェクトに変換します。名前の「p」の由来は見つけられませんでしたが、parseのpではないかと推測しました。

Time.strptimeTimeクラスを拡張するRubyのライブラリなのでrequireして使います。昨日のstrftimeは組み込みのTimeクラスのメソッドですので、その点が異なります。

C言語のstrptime(3)やglibcを参考に作られています。

ParseDateモジュールでも同じようなことができます。

個別のパラメータについてはDate#strftimestrptime(3)をご覧ください。

Apacheログなどの「2016-10-07T04:05:06+09:00」を変換したいとき

Time.strptimeの例そのままですが、よく使われるパターンです。

require 'time'
Time.strptime('2016-10-07T04:05:06+09:00', '%Y-%m-%dT%H:%M:%S%z')

161007_1433_S2xwUk

「2016年10月07日 12:13:23」を変換したいとき

require 'time'
Time.strptime("2016年10月07日 12:13:23", '%Y年%m月%d日 %H:%M:%S')

161007_1217_aCp0Sj

ゼロがスペースになっている「2016年 1月 1日 1: 3: 3」を変換したいとき

require 'time'
Time.strptime("2016年 1月 1日  1: 3: 3", '%Y年 %m月 %d日 %H: %M: %S')

少々極端な例ですが、フォーマットの%mなどの前にスペースを置くことで、上位桁のゼロがスペースになっている文字列を変換できます。

161007_1229_47L2yj

スペースの部分に数字が入っても正常に処理されます。

参考: 日本語表記の日時をTimeオブジェクトに変換(Time.strptimeメソッド)

「2016-10-07 午後 04:18」を変換したいとき

「2016-10-07」の形式にはショートハンドの%Fが便利です。

午前と午後の表示は手を加える必要があります。めったに使わないと思いますが。

require 'time'
datetime = '2016-10-07 午後 04:18'.sub(/午前/, 'AM').sub(/午後/, 'PM')
pry(main)> Time.strptime(datetime, '%F %p %H:%M')

161007_1404_u1FGY0

なお、%p%Pでは同じ結果でした。

関連記事

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

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833

コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。
これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。
かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。
実は最近Go言語が好き。
仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ