Webサイト制作コースのお申し込みはこちら

システム開発において、日付/時刻や数値を書式(フォーマット)指定して文字列にすることは多くのシーンであります。

この記事では、RubyのDateDateTimeなどの日付型の値や、IntegerFloatなどの数値をフォーマット指定で文字列に変換する方法を解説します。

日付のフォーマット

Rubyで日付型をフォーマット指定で文字列に変換する時は、strftimeメソッドを使用します。
strftimeメソッドは日付を扱うDateクラス、時間を扱うTimeクラス、日時を扱うDateTimeクラスすべてに用意されています。

strftimeメソッドの構文は次の通りです。

Date.strftime([format文字列])
Time.strftime([format文字列])
DateTime.strftime([format文字列])

日付をフォマットするサンプルコード

strftimeメソッドを使って、日付や時刻をフォーマットするサンプルコードをいくつか見ていきましょう。

次のコードはDate.todayで取得した日付を、YYYY/MM/DD形式の日付文字列にフォーマットしています。

require "date"
d = Date.today
puts d.strftime("現在日付:%Y/%m/%d")
【実行結果】
------------------
現在日付:2021/02/03

次は時刻を扱うTimeクラスのstrftimeメソッドを呼んで、時刻をHH:MM:SS形式でフォーマットしてみましょう。

require "date"
t = Time.now
puts t.strftime("現在時刻:%H:%M:%S")
【実行結果】
------------------
現在時刻:23:48:00

最後は、日付と時刻が両方扱えるDateTimeクラスの値を、strftimeメソッドでフォーマットしてみます。

require "date"
dt = DateTime.now
puts dt.strftime("現在日時:%Y/%m/%d %H:%M:%S")
【実行結果】
------------------
現在日時:2021/02/03 23:52:24

format文字列

strftimeメソッドで format文字列は、前のサンプルコードで使ったもの以外にも、次の表に示す文字列が使用できます。

format文字列 説明 出力例
%A 曜日名 Sunday, Monday
%a 曜日省略名 Sun, Mon
%B 月の名前 January, February
%b 月の省略名 Jan, Feb
%c 日付と時刻 Thu Feb 4 00:15:53 2021
%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-59
%U 1/1以降の最初の日曜日が第1週とした週の数 00-53
%W 1/1以降の最初の月曜日が第1週とした週の数 00-53
%w 曜日を表す数字。 0-6
%X 時刻 00:00:00
%x 日付 02/04/21
%Y 西暦の年 2021
%y 西暦の年(2桁) 21
%Z タイムゾーン +00:00

%のエスケープする

strftimeメソッドに指定する format文字列は、年であれば%Y、月であれば%mなど、すべて特殊記号の%から始まります。

%自身を特殊記号ではなく通常の文字列として出力したい場合は、%%のようにしてエスケープします。

require "date"
dt = Date.today
puts dt.strftime("%Y/%m/%dの降水確率は50%%です")
【実行結果】
------------------
2021/02/04の降水確率は50%です

数値のフォーマット

次は、Rubyで数値のフォーマットを行う方法を解説していきます。

フォーマット指定で数値を文字列に変換することで、指定桁数までゼロを挿入する、いわゆる「ゼロ埋め」などができます。

Rubyでは、数値をフォーマットする方法としてsprintfメソッド とString#%を使う2つの方法があります。

sprintfで数値をフォーマット

まずは、sprintfメソッド の使い方を見ていきましょう。Rubyのsprintfメソッド は基本的はC言語と同じ構文・動作をします。

まずは、単純に数値を文字列にする%dを書式指示子に指定して、数値を文字列化するサンプルコードを見てみましょう。

puts sprintf("%d", 10)  #=> "10"
【実行結果】
------------------
"10"

書式指示子は複数指定でき、その場合は、指定した指示子の左から順に対応するように、第2引数以降に値を指定します。

puts sprintf("%d、%d、%d", 10, 20, 30) 
【実行結果】
------------------
"10、20、30"

指定桁数に満たない時に左側にゼロを埋める場合、%0<ゼロ埋めする桁数>dのように書式指示子に指定します。

次のコードは、数値を10桁でゼロ埋めするサンプルコードです。

puts sprintf("%010d", 10)
【実行結果】
------------------
"0000000010"

ゼロ埋めではなく、指定桁数に満たない時にスペースを埋める場合は、%<ゼロ埋めする桁数>dのように書式指示子を指定します。

次のコードは、数値が10桁に満たない時に、左側にスペースを埋めるサンプルコードです。

puts sprintf("%10d", 10)
【実行結果】
------------------
"        10"

浮動小数点で、小数点以下の桁数を指定する場合は次のように指示子fを使用します。

puts sprintf("%.5f", 12)  
puts sprintf("%.5f", 0.5)  
【実行結果】
------------------
"12.00000"
"0.50000"

2進、8進、16進数の形式で数値を文字列化することもできます。

puts sprintf("2進数:%#B", 10)
puts sprintf("8進数:%#o", 10)
puts sprintf("16進数:%#X", 10)
【実行結果】
------------------
2進数:0B1010
8進数:012
16進数:0XA

String#%で数値をフォーマット

Rubyではsprintfメソッドの他に、“%d” % 10のような形で指示子と値を%で区切ってフォーマットをかけることができます。

sprintfよりもString#%を使用する方が、よりRubyらいしコードの書き方で、また、String#%で使用できる指示子はsprintfメソッドと基本的に同じであるため、積極的に使っていきましょう。

String#%で数値をフォーマットするサンプルコードをいくつか見ていきましょう。

まずは、数値を10桁でゼロ埋めするコードです。記述の仕方は違えど、使用する指示子は“%010d”sprintfメソッドと同じです。

puts "%010d" % 120
【実行結果】
------------------
0000000120

浮動小数点の場合も、当然使用する指示子はsprintfと同じです。

puts "%.5f" % 1
puts "%.5f" % 0.5
【実行結果】
------------------
1.00000
0.50000
ポテパンダの一言メモ

浮動小数点をフォーマットする際、指示子で指定した小数点以下の桁数よりも、実際に指定する小数点の桁数の方が多い場合、四捨五入された結果でフォーマットされるため注意しましょう。

例えば“%.5f” % 0.123456のようなコードの場合、結果は小数点「0.12346」となり小数点以下の桁数が5桁となるように四捨五入されます。

3桁ごとにカンマ編集する

金額を扱うようなシステムであれば、数値を3桁毎にカンマ編集するといったシーンがあるでしょう。

sprintfメソッド String#%は、3桁ごとにカンマ編集するといったことは出来ないため、:delimitedメソッド を使用します。

12345678.to_s(:delimited)

よく使うフォーマットは覚えておこう

Rubyで日付や数値をフォーマットする方法を解説してきました。

フォーマット処理は非常によく使うため、是非覚えておきましょう。

【関連記事】
【Java入門】配列と初期化につい

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。