オーダーメイドコース
icon
icon

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

 

[PR] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

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

ソースコード

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では、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。