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

現地時間をGMT(グリニッジ標準時)に変換するJavaプログラム

この記事では、Javaを使って現地時間(ローカルタイム)をGMT(グリニッジ標準時)に変換する方法について解説します。

Javaには組み込みのDateクラスは用意されていませんが、java.timeパッケージをインポートすることで、日付や時刻を扱う豊富なAPIを利用できます。また、従来から使われているSimpleDateFormatクラスとTimeZoneクラスを組み合わせることでも、タイムゾーンの変換は簡単に行えます。

変換イメージ

まず、今回の処理でどのような変換が行われるのか、入力と出力の例を見てみましょう。

入力(現地時間):

The local time is: Fri Mar 18 00:01:54 IST 2022

出力(GMT時刻):

The time in Gmt is: 17/03/2022 18:31:54

インド標準時(IST)はGMTより5時間30分進んでいるため、上記のように時刻が変換されます。

アルゴリズム

処理の流れは以下の通りです。

Step 1 - 処理開始
Step 2 - 日付・時刻を保持するDateオブジェクトを宣言する
Step 3 - 現在のシステム時刻を取得して値を設定する
Step 4 - SimpleDateFormatオブジェクトで日時の出力フォーマットを定義する
Step 5 - TimeZone.getTimeZone("GMT")でタイムゾーンをGMTに設定する
Step 6 - 変換後のGMT時刻を表示する
Step 7 - 処理終了

使用する主なクラス

  • Date:現在の日付・時刻を表すオブジェクトを生成します。
  • SimpleDateFormat:「dd/MM/yyyy HH:mm:ss」のようなパターンで日時を整形します。
  • TimeZonegetTimeZone("GMT")によりGMTタイムゾーンを取得し、フォーマッタに適用します。

例1:mainメソッドにすべての処理を記述する方法

ここでは、すべての操作をmain関数内にまとめて記述します。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Demo {
   public static void main(String[] args){
      System.out.println("必要なパッケージをインポートしました");
      Date localTime = new Date();
      System.out.println("Dateオブジェクトを生成しました");

      DateFormat GMT_format = new SimpleDateFormat("dd/MM/yyyy" + " " + " HH:mm:ss");
      GMT_format.setTimeZone(TimeZone.getTimeZone("GMT"));

      System.out.println("\n現地時間: " + localTime);
      System.out.println("GMT時刻: " + GMT_format.format(localTime));
   }
}

実行結果

必要なパッケージをインポートしました
Dateオブジェクトを生成しました

現地時間: Tue Mar 29 08:59:11 UTC 2022
GMT時刻: 29/03/2022 08:59:11

例2:オブジェクト指向スタイルで関数に分割する方法

次に、変換処理を独立したメソッドとしてカプセル化し、オブジェクト指向プログラミングの形式で記述します。処理を分離することで、コードの再利用性と可読性が向上します。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Demo {
   static void GMT_time(Date localTime){
      DateFormat GMT_format = new SimpleDateFormat("dd/MM/yyyy" + " " + " HH:mm:ss");
      GMT_format.setTimeZone(TimeZone.getTimeZone("GMT"));
      System.out.println("\n現地時間: " + localTime);
      System.out.println("GMT時刻: " + GMT_format.format(localTime));
   }

   public static void main(String[] args){
      System.out.println("必要なパッケージをインポートしました");
      Date localTime = new Date();
      System.out.println("Dateオブジェクトを生成しました");
      GMT_time(localTime);
   }
}

実行結果

必要なパッケージをインポートしました
Dateオブジェクトを生成しました

現地時間: Tue Mar 29 08:59:38 UTC 2022
GMT時刻: 29/03/2022 08:59:38

補足:java.time APIを使ったモダンな方法

Java 8以降では、より推奨されているjava.timeパッケージを使って次のように書くこともできます。

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class Demo {
   public static void main(String[] args){
      ZonedDateTime gmtTime = ZonedDateTime.now(ZoneId.of("GMT"));
      DateTimeFormatter formatter =
         DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
      System.out.println("GMT時刻: " + formatter.format(gmtTime));
   }
}

ZonedDateTimeはスレッドセーフであり、タイムゾーンの扱いも直感的なため、新規開発ではこちらのAPIを採用するのがおすすめです。

まとめ

本記事では、SimpleDateFormatTimeZoneクラスを利用して、現地時間をGMTに変換する2つの実装例を紹介しました。どちらのコードも数行の追加でタイムゾーン変換が実現できるため、多国籍向けアプリケーションやログの時刻統一など、さまざまな場面で活用できます。

  1. Javaで台形の面積を求めるプログラムの作成方法を解説

    この記事では、Javaを使って台形(トラペジウム)の面積を求める方法について詳しく解説します。台形とは、少なくとも1組の対辺が互いに平行になっている四角形のことです。平行な2つの辺は「底辺」と呼ばれ、平行でない残りの2つの辺は「脚」と呼ばれます。英語圏では trapezoid(トラペゾイド)と呼ばれることもあります。 台形の面積は、次の公式を使って計算できます。 面積 = (高さ ÷ 2) × (上底 + 下底) すなわち、 面積 = ½ × (平行な2辺の長さの合計) × (平行な2辺間の垂直距離) 以下に具体的なイメージを示します。平行な2辺の長さを a、b、台形の高さを h としたとき

  2. 【Java入門】長方形の周囲(外周)を求めるプログラムの作り方

    長方形の周囲とは? この記事では、Javaを使って長方形の周囲(外周)を求める方法を解説します。長方形の周囲とは、長方形の4つの辺すべての長さを足し合わせた合計のことで、次の図のように「縦の辺2本」と「横の辺2本」の長さを合計したものに相当します。 長方形は向かい合う辺の長さが等しいという性質を持つため、周囲は次の式で計算できます。 周囲 = 2 ×(縦の長さ + 横の長さ) 入力と出力の例 たとえば、入力が次の値であるとします。 長方形の各辺の長さ:5, 8, 5, 8 このとき、期待される出力は次のとおりです。 Perimeter : 26 アルゴリズム 処理の流れは以下のようになりま