Rubyで日付/数値をフォーマットする方法 (format)
  • facebookページ
  • twitterページ
  • 2021.02.25

    Rubyで日付/数値をフォーマットする方法 (format)

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

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

    日付のフォーマット

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

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

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

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

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

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

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

    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など、すべて特殊記号の %から始まります。

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

    数値のフォーマット

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

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

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

    sprintfで数値をフォーマット

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ポテパンダの一言メモ

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

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

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

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

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

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

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

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

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



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE