BLOGTIMES
2015/08/01

日本語の日付を Date に変換するには

  ruby  c 
このエントリーをはてなブックマークに追加

Ruby で文字列を Date に変換するには Date.parse() が使えますが、たまに上手くいかないことがあるので、任意のフォーマットを指定して Date に変換する方法がないかと思ってリファレンスを隅々まで読んでみたら Date.strptime() というちょうど良いモノが用意されていることが分かったのでメモ。

singleton method DateTime.strptime (Ruby 2.1.0)

strptime(str = '-4712-01-01', format = '%F', start = Date::ITALY) -> Date
与えられた雛型で日付表現を解析し、 その情報に基づいて日付オブジェクトを生成します。
Date._strptime も参照してください。 また strptime(3)、および Date#strftime も参照してください。

ちょうど strftime() の逆をやるメソッドみたいですね。こんな感じで日本語の日付を parse できます。

$ irb irb(main):001:0> require 'date' => true irb(main):002:0> d = Date.strptime('2015年 8月 1日','%Y年 %m月 %d日') => #<Date: 4914471/2,0,2299161> irb(main):003:0> d.to_s => "2015-08-01"

実は C に srtptime() があった

リファレンスに strptime(3) を参考にしろということが書いてあったので、実はこの機能は C のライブラリ由来なんですね。まったく使ったことがなかったので知りませんでした。man を調べてみると確かに strptime() という char* を struct tm に変換する関数があります。フォーマットの指定部分についても以下のように解説がありますね。

Man page of STRPTIME

format 引き数は、 scanf(3) で使われているような、 フィールドディスクリプターとテキスト文字で構成されている文字列である。 個々のフィールドディスクリプターは % とそれに続く文字からなり、 後者にフィールドディスクリプターを置き換える内容を指定する。 format 文字列中の他の全ての文字には、入力文字列にマッチする文字がなければならない。 フォーマット文字列中にある空白は例外であり、 入力文字列中の 0 個以上の空白とマッチする。 2 つのフィールドディスクリプターの間には、 空白・英字・数字がなければならない。

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7797
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン