こんにちは!システムエンジニアのオオイシです。
Rubyのstrftimeメソッドを使って日時データを文字列に変換する方法を知っていますか?
Rubyのstrftimeメソッドは日時データを編集して文字列に変換することができます。
この記事では、
- strftimeメソッドとは
 - 日時を扱ってみる
 - 様々な使い方(書式一覧表)
 
といった基本的な内容から、
- 曜日を日本語で表示する方法
 - ミリ秒までの時間を表示する方法
 
などの応用的な使い方に関しても解説していきます。
今回はこれらの方法を覚えるために、strftimeメソッドのさまざまな使い方をわかりやすく解説します!
strftimeメソッドとは

Rubyのstrftimeメソッドは、日付や日時のデータを編集して文字列に変換するためのメソッドです。
例えば、”2018-01-02 03:04:05”といった日時データを”2018年1月2日 3時4分5秒”のように文字列に日本語で表記できると便利ですよね?
そんな時にこれから解説するstrftimeメソッドは能力を発揮します。
使い方はstrftimeメソッドの第1引数に書式を指定して次のように記述します。
日時データ.strftime(書式の文字列) 日付データ.strftime(書式の文字列)
では次項よりstrftimeメソッドの使い方を見ていきましょう。
strftimeの基本的な使い方
日時を扱ってみる
さっそくですが、Rubyのstrftimeメソッドを使って日時を扱ってみましょう。
はじめに紹介するサンプルプログラムは、現在日時の”2018-01-02 03:04:05”を文字列の”2018年1月2日 3時4分5秒”へ変換する内容です。
time = Time.now
p time
p time.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒")
実行結果:
2018-01-02 03:04:05 +0900 "2018年1月2日 3時4分5秒"
このように、現在の日時が入った変数timeを日本語表記の文字列に変換することができました。
日時をstrftimeメソッドを使って編集する場面は、実際の開発現場においてもよくあるので覚えておくと何かと役に役に立ちます。
他にも、strftimeメソッドは様々使い方があるので次の説明をみてください!
指定できる書式一覧
Rubyのstrftimeメソッドは、日付や日時のデータを編集して文字列に変換するためのメソッドです。
書式はいろいろな書き方や種類があるため記述例とともに一覧表で確認してみましょう。
よく使う書式 
(※日時は2018年1月2日 3時4分5秒 567ミリ秒を想定)(※△=スペース)
| 書式 | 簡単な説明 | 記述例 | 出力例 | 
|---|---|---|---|
| %Y | 西暦 | 日時データ.strftime("%Y") | 2018 | 
| %y | 西暦(下2桁) | 日時データ.strftime("%y") | 18 | 
| %m | 月(2桁) | 日時データ.strftime("%m") | 01 | 
| %d | 日(2桁) | 日時データ.strftime("%d") | 02 | 
| %-d | 日(1~2桁) | 日時データ.strftime("%-d") | 2 | 
| %e | 日(空白埋め2桁) | 日時データ.strftime("%e") | △2 | 
| %H | 時(2桁)24時間制 | 日時データ.strftime("%H”) | 03 | 
| %-H | 時(1~2桁)24時間制 | 日時データ.strftime("%-H”) | 3 | 
| %k | 時(空白埋め2桁)24時間制 | 日時データ.strftime("%k”) | △3 | 
| %l | 時(1~2桁)12時間制 | 日時データ.strftime("%l”) | △3 | 
| %M | 分(2桁) | 日時データ.strftime("%M”) | 04 | 
| %-M | 分(1~2桁) | 日時データ.strftime("%-M”) | 4 | 
| %S | 秒(2桁) | 日時データ.strftime("%S”) | 05 | 
| %-S | 秒(1~2桁) | 日時データ.strftime("%-S”) | 5 | 
| %L | ミリ秒 | 日時データ.strftime("%L”) | 567 | 
| %F | 日付 | 日時データ.strftime("%F”) | 2018-01-02 | 
| %T | 時刻(時分秒)24時間制 | 日時データ.strftime("%T”) | 03:04:05 | 
| %R | 時刻(時分)24時間制 | 日時データ.strftime("%R”) | 03:04 | 
| %r | 時刻(時分秒)12時間制と 午前または午後  | 日時データ.strftime("%r”) | 03:04:05 AM | 
| %P | 午前または午後(小文字) | 日時データ.strftime("%P”) | am | 
| %p | 午前または午後(大文字) | 日時データ.strftime("%p”) | AM | 
このように、strftimeメソッドはいろいろな書式を指定できることがわかりました。
すこし難しく感じましたか?
次の章ではこれらを使ってサンプルプログラムを使い、実際に動きを確認してみましょう。
曜日を日本語で表示する方法
Rubyのstrftimeメソッドは、「%A」や「%a」の書式を指定して曜日を含んだ文字列に変換できます。
週を表示する書式
| 書式 | 簡単な説明 | 記述例 | 出力例 | 
|---|---|---|---|
| %A | 週 | 日時データ.strftime("%A”) | Tuesday | 
| %a | 週(略称) | 日時データ.strftime("%a”) | Tue | 
しかし、「%A」や「%a」では、英語表記しかできないため、月曜日、火曜日・・・のように日本語表記したい場合は使えません。
そのため、自前でコーディングする必要があります。
とは言っても曜日の日本語表示は、簡単に実現できるんですよ!
Rubyのstrftimeメソッドには、曜日と数値として表示するために書式指定する「%u」があるため、これを使って、曜日を日本語表示するサンプルプログラムを確認してみましょう。
曜日の数値を表示する書式
| 書式 | 簡単な説明 | 記述例 | 出力例 | 
|---|---|---|---|
| %u | 曜日の数値表現(月曜を1として7まで) | 日時データ.strftime("%u”) | 2 (※火曜の意味)  | 
まず、曜日の日本語表示の前に「%u」の使いかたをサンプルプログラムで確認します。
サンプルプログラムは、現在日付が”2018-01-02を想定した曜日を表示します。
require 'date'
date = Date.today
p date.strftime("%Y年%-m月%-d日 %a")
p date.strftime("%Y年%-m月%-d日 %u")
実行結果:
"2018年1月2日 Tue" "2018年1月2日 2"
このように「%u」を使うと、Tue(火曜日)は月曜から数えて2番目の”2”が表示されることが確認できました。
次に、「%u」を使って曜日を日本語表示するサンプルプログラムを確認して見ましょう。
require 'date'
date = Date.today
weeks = ["月","火","水","木","金","土","日"]
index = date.strftime("%u").to_i
p date.strftime("%Y年%-m月%-d日 %u")
p date.strftime("%Y年%-m月%-d日 #{weeks[index - 1]}曜日")
実行結果:
"2018年1月2日 2" "2018年1月2日 火曜日"
このように、曜日を日本語表示する事ができました。
7行目の「date.strftime(“%u”).to_i」の部分は、書式に「%u」を指定すると火曜日の意味である”2” が取得できるので、これを配列weeksへの位置が指定できるように、整数型に変換して変数indexに設定しています。
10行目の「weeks[index – 1]」は日本語の曜日が入った配列weeksの位置を指定しています。
マイナス1する理由は配列の要素は0から始まるためです。
「#{ }」の意味は、文字列の中に変数や処理を埋め込むための記述です。
ミリ秒までの時間を表示する方法
Rubyのstrftimeメソッドは、「%L」の書式を指定してミリ秒を文字列に変換できます。
現在日時は、日本時間の”2018-01-02 03:04:05.678”を想定したサンプルプログラムを確認してみましょう。
time = Time.now
p time.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒 %Lミリ秒")
実行結果:
"2018年1月2日 3時4分5秒 567ミリ秒"
このように、「%L」の書式を指定してミリ秒を文字列に変換できることが確認できました。
日付の使い総まとめ
Rubyの日付や日時のデータを扱うためには、Timeクラス、Dateクラス、DateTimeクラスを使います。
日時はTimeクラスまたはDateTimeクラスを利用し、日付はDateクラスを利用します。
また、RubyonRailsでは日時を便利に扱うための拡張機能が多く存在します。
詳しくは、こちらで詳しく説明していますのでぜひ参考にしてください。
            
                
                    
まとめ
いかかでしたか?
今回はstrftimeメソッドの使い方について説明しました。
Rubyのstrftimeメソッドは、日付や日時の書式の文字列に変換するためのメソッドです。
日時のデータを”2018年1月2日 3時4分5秒”のように日本語表示したり、日付に応じた曜日を表示したい場面で便利なので、ぜひ活用してください。
もし、はstrftimeメソッドの使い方を忘れてしまったらこの記事を確認してくださいね!
  





