Rubyで日付のフォーマットを変換する方法【初心者向け】

初心者向けにRubyで日付のフォーマットを変換する方法について解説しています。Dateクラスなどで取得したデータを指定のフォーマットで表示していきます。よく使う手法なので、実際に書いて実行結果を見ながら学んでいきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyで日付のフォーマットを指定する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、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 タイムゾーン
%% パーセント文字

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

実際に様々なフォーマットに変更し、実行結果を確認していきましょう。

ソースコード

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エンジニア

過去の開発実績・業務内容:
一部上場企業にて、WEBアプリケーションの受託開発、自社WEBサービス開発、自社ゲーム開発に従事
現在はフリーで活動し、ECサイト開発/運営、課題を解決するためのシステムコンサルタントなどを実施

趣味など
フリーでの活動を期に沖縄へ移住したので、海でのスキンダイビング、釣りなどを趣味にしています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。