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

こんにちは、hachi8833です。つい先ほどTechRachoをSSL暗号化いたしました。

query

160914_1648_wKvt8f

関係ありませんが、スクショ撮影中にSlackの時間表示方法を切り替えました。

以下、よく使いそうなオプションを集めてみましたのでスニペットにでもどうぞ。strptimeはまた今度。

注意: コード中で時間取得に使っているTime.nowはすべてRuby 2.3.1の場合です。

RailsであればTime.zone.nowTime.currentにする必要があります。

strftime

Time#strftimeは、Timeオブジェクトの表示形式を指定して文字列に変換します。TimeはRubyの組み込みオブジェクトです。個別のパラメータについてはTime#strftimeをご覧ください。

「2016年10月06日 15:37:49」にしたいとき

time = Time.now 
time.strftime("%Y年%m月%d日 %H:%M:%S")

161006_1538_gBs6L4

「16-10-06」にしたいとき

time.strftime("%y-%m-%d")

161006_1546_7BwmfC

「04:18 PM」にしたいとき

time.strftime("%I:%M %p")

161006_1625_3WLALN

「2016/10/06(木)」にしたいとき

以下はRailsのI18nを使わない方法で曜日を表示しています。タイムゾーンなどを正しく扱うには「Railsでの、日本語対応の短縮曜日の表示」などを参考にI18nをお使いください。

wd = ["日", "月", "火", "水", "木", "金", "土"]
time = Time.now
time.strftime("%Y/%m/%d(#{wd[time.wday]})")

161006_1615_WNjo6k

参考: 日本語曜日入り日付フォーマットを1行で書く

「午後 04:18」にしたいとき

RubyのTimeクラスに午前/午後を取得するメソッドがないので、以下の方法で「午前」「午後」を表示してみました。

time = Time.now
ampm = time.hour < 12 ? "午前" : "午後"
time.strftime("#{ampm} %I:%M")

161006_1830_OJvLgj

なお、昼の12時が午前か午後かについてはYahoo!知恵袋などに議論がありました。

参考: Ruby: how to get at meridian in Time objects?

関連記事

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の書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ