Rubyで日付のフォーマットを変換する方法【初心者向け】
初心者向けにRubyで日付のフォーマットを変換する方法について解説しています。Dateクラスなどで取得したデータを指定のフォーマットで表示していきます。よく使う手法なので、実際に書いて実行結果を見ながら学んでいきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Rubyで日付のフォーマットを指定する方法について解説します。
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプRuby講座の内容をもとに紹介しています。
今回は、Rubyに関する内容だね!
どういう内容でしょうか?
日付のフォーマットを変換する方法について詳しく説明していくね!
お願いします!
日付のフォーマットとは
WEBアプリケーションを開発していると、本日の日付などを表示したい場合などがあります。
例えば 2018年○月○日 などの表示結果がほしい場合などですね。
Rubyで日付を扱う場合、 Dateクラス、DateTimeクラスなどを使用しますが、そのままでは意図した表示結果になりません。
require 'date' date = DateTime.now # 現在のDateTimeオブジェクトを取得 p date.to_s # DateTimeオブジェクトを文字列に変換して出力 結果 ⇛ "2018-07-16T08:51:27+09:00"
そこで、 `strftime` メソッドを使用して、フォーマットを変更しましょう。
日付のフォーマットを変換する方法
DateTimeクラスには、 strftime というメソッドが存在します。
これを使用する事で、意図したフォーマットにし、出力する事ができます。
使用方法は以下の通りです。
require 'date' date = DateTime.now # 現在のDateTimeオブジェクトを取得 p date.strftime("%Y年%m月%d日") # DateTimeオブジェクトのフォーマットを指定し出力 結果 ⇛ "2018年7月16日"
この `strftime` 内で記述できる `%Y`などは、年を表示するなどの指定になっています。
指定方法は、以下の通りです。
表記 | 説明 |
%A | 曜日の名称(Sunday,Monday…) |
%a | 曜日の省略名(Sun,Mon…) |
%B | 月の名称(January,February…) |
%b | 月の省略名(Jan, Feb…) |
%c | 日付と時刻 |
%d | 日(01-31) |
%H | 24時間制の時(00-23) |
%I | 12時間制の時(01-12) |
%j | 年中の通算日(001-366) |
%M | 分(00-59) |
%m | 月を表す数字(01-12) |
%p | 午前または午後(AM,PM) |
%S | 秒(00-60)(60はうるう秒) |
%U | 週を表す数。最初の日曜日が第1週の始まり(00-53) |
%W | 週を表す数。最初の月曜日が第1週の始まり(00-53) |
%w | 曜日を表す数。日曜日が0(0-6) |
%X | 時刻 |
%x | 日付 |
%Y | 西暦を表す数 |
%y | 西暦の下2桁(00-99) |
%Z | タイムゾーン |
%% | パーセント文字 |
実際に書いてみよう
実際に様々なフォーマットに変更し、実行結果を確認していきましょう。
ソースコード
require 'date' date = DateTime.now # 現在の日時でDateTimeオブジェクトを生成 # 年月日 p date.strftime("%Y年%m月%d日") # 結果:2018年07月16日 p date.strftime("%y年%m月%d日") # 結果:18年07月16日 # 日/月/年(2桁) p date.strftime("%x") # 結果:07/16/18 # 年月日と時間 p date.strftime("%Y年%m月%d日 %H:%M:%S") # 結果:2018年07月16日 08:45:47 # 年-月-日と曜日 p date.strftime("%Y-%m-%d(%a)") # 結果:2018-07-16(Mon) # タイムゾーンを付与 p date.strftime("%Y-%m-%d %H:%M:%S %Z") # 結果:2018-07-16 08:45:47 +09:00 # 曜日、月、日付 時間 p date.strftime("%a %b %d %H:%M:%S %Z %Y") # 結果:Mon Jul 16 08:45:47 +09:00 2018 # 曜日を日本語に変更する場合 dw = ["日", "月", "火", "水", "木", "金", "土"] p date.strftime("%Y/%m/%d(#{dw[date.wday]})") # 結果:2018/07/16(月)
日付などは、必要とする表示方法は使用するアプリケーションによって異なります。
`strftime` などのメソッドを利用し、適切なフォーマットへと変更する様にしていきましょう。
回答してくれたメンター
中廣 誠
職種: WEBエンジニア 過去の開発実績・業務内容: 趣味など |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。