Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのprintf()メソッドで日時をフォーマットする方法をわかりやすく解説

Javaのprintf()メソッドは、書式指定子(フォーマット文字列)に従って整形された文字列を出力するためのメソッドです。第1引数に書式を表す文字列を受け取り、続く引数には結果の文字列に埋め込む要素となるオブジェクトを渡します。なお、引数の数が書式文字列内の変換指定子の数より多い場合、余分なオブジェクトは単純に無視されます。

時刻のフォーマットに使える変換文字の一覧

次の表は、Javaのprintf()メソッドで時刻を整形する際に利用できる主な変換文字とその説明です。

変換文字説明
'H'対応する引数を「時」として整形します(00〜23)。24時間表記です。
'I'対応する引数を「時」として整形します(01〜12)。12時間表記です。
'k'対応する引数を「時」として整形します(0〜23)。先頭のゼロが付きません。
'l'対応する引数を「時」として整形します(1〜12)。先頭のゼロが付きません。
'M'対応する引数を「分」として整形します(00〜59)。
'S'対応する引数を「秒」として整形します(00〜60)。
'L'対応する引数をミリ秒として整形します(000〜999)。
'N'対応する引数をナノ秒として整形します(000000000〜999999999)。
'p'対応する引数を午前(am)または午後(pm)として整形します。
'z'対応する引数をタイムゾーンのオフセットとして整形します。
'Z'対応する引数をタイムゾーンを表す文字列として整形します。
's'対応する引数をエポック(1970年1月1日)からの経過秒数として整形します。
'Q'対応する引数をエポックからの経過ミリ秒数として整形します。

サンプルコード:基本的な日時の出力

次の例では、printf()メソッドを使ってDateオブジェクトの日時を整形して出力しています。

import java.util.Date;
public class Example {
    public static void main(String args[]) {
        // Dateクラスのインスタンスを生成
        Date obj = new Date();
        System.out.printf("%tT%n", obj);
        System.out.printf("Hours: %tH%n", obj);
        System.out.printf("Minutes: %tM%n", obj);
        System.out.printf("Seconds: %tS%n", obj);
    }
}

実行結果

15:50:28
Hours: 15
Minutes: 50
Seconds: 28

サンプルコード:12時間制と24時間制の出力

次の例では、同じDateオブジェクトから12時間表記と24時間表記の時刻をそれぞれ出力しています。

import java.util.Date;
public class Example {
    public static void main(String args[]) {
        // Dateクラスのインスタンスを生成
        Date obj = new Date();
        System.out.printf("%tT%n", obj);
        System.out.printf("Time 12 hours: %tI:%tM %tp %n", obj, obj, obj);
        System.out.printf("Time 24 hours: %tH: hours %tM: minutes %tS: seconds%n", obj, obj, obj);
    }
}

実行結果

11:38:08
Time 12 hours: 11:38 am
Time 24 hours: 11: hours 38: minutes 08: seconds

インデックス参照で引数の重複を避ける

上の例では、同じDateオブジェクトを複数回引数として渡しています。これは「1$」のようなインデックス参照を使うことで簡潔に書き換えられます。%1$tMのように書けば、1番目の引数を再利用できるため、引数を何度も渡す必要がありません。

サンプルコード:インデックス参照を使用した例

import java.util.Date;
public class Example {
    public static void main(String args[]) {
        // Dateクラスのインスタンスを生成
        Date obj = new Date();
        System.out.printf("%tT%n", obj);
        System.out.printf("Time 12 hours: %tI:%1$tM %1$tp %n", obj);
        System.out.printf("Time 24 hours: %1$tH: hours %1$tM: minutes %1$tS: seconds%n", obj);
    }
}

実行結果

11:47:13
Time 12 hours: 11:47 am
Time 24 hours: 11: hours 47: minutes 13: seconds

このように、printf()メソッドの変換文字とインデックス参照を組み合わせれば、日時を柔軟かつ効率的に整形して出力できます。ログ出力やレポート生成などの場面でぜひ活用してみてください。

  1. JavaのMath.random()メソッド徹底解説!乱数生成の基本から範囲指定まで

    JavaのMath.random()メソッドは、0.0以上1.0未満の擬似乱数(疑似ランダムな数値)を生成するためのメソッドです。生成された乱数に別の数値を掛けることで、0〜1以外の任意の範囲の乱数を取得することもできます。結果が0になることはあっても、1以上になることはありません。 プログラミングで乱数が必要になる場面 プログラミングをしていると、ランダムな数値を生成したい場面によく出会います。例えば、クルーズ船会社を運営しているとしましょう。顧客の注文番号として使う予約参照番号をランダムに生成したり、数当てゲーム用のランダムな数字を作りたいといったケースが考えられます。 Javaには、乱

  2. JavaとMySQLでLIKE検索を使う際、検索変数の引用符を正しく記述する方法

    JavaからMySQLに接続し、LIKE句で検索変数(キーワード)を使ったあいまい検索を行う場合、SQL文中の文字列を正しくシングルクォート()で囲むことが重要です。まず、検索変数を使ったLIKE句の正しい構文を見てみましょう。String sqlQuery; sqlQuery = select * from yourTableName where yourColumnName like % + yourSearchVariableName + %;それでは、実際にサンプルテーブルを作成して動作を確認していきます。サンプルテーブルの作成まず、テーブルを作成します。mysql> creat