PythonでUTCの日時データを日本時間(JST)に変換する方法

はじめに

データを扱う際、タイムゾーンの違いによる日時の変換は避けられない問題のひとつです。特に、サーバーから取得したデータがUTC(協定世界時)で記録されている場合、日本時間(JST)に変換する必要があります。

今回は Python を使って UTC の日時データを JST に変換するスクリプト を作成し、その方法を詳しく解説します。


1. Pythonの環境を準備

まずは、必要なライブラリをインストールします。

pip install pandas pytz

pandas はデータ処理を行うためのライブラリで、pytz はタイムゾーンの変換を行うために使用します。


2. CSVファイルの準備

今回のサンプルでは、以下のような UTCの日付データ を含むCSVファイル(input.csv)を使用します。

input.csv(変換前)

IDTitleDate (UTC)
1Sample 12025-03-13 16:17:56
2Sample 22025-03-13 18:30:45

3. UTC → JST 変換スクリプト

以下のPythonスクリプトを使って、UTCの日時を日本時間(JST)に変換します。

convert_utc_to_jst.py

import pandas as pd
import pytz

# CSVファイルのパスを指定
input_file = "input.csv"  # 変換するCSVファイル
output_file = "output_jst.csv"  # 変換後のCSVファイル

# CSVファイルを読み込む
df = pd.read_csv(input_file)

# カラム名のチェック
print("CSVのカラム一覧:", df.columns.tolist())

# UTCと日本時間のタイムゾーンを設定
utc = pytz.utc
jst = pytz.timezone('Asia/Tokyo')

# UTC→JST変換(カラム名を事前にチェック)
if 'Date' in df.columns:
    df['Date'] = pd.to_datetime(df['Date'], errors='coerce')  # 文字列を日付型に変換
    df = df.dropna(subset=['Date'])  # 変換できなかった(NaT)行を削除
    df['Date'] = df['Date'].dt.tz_localize(utc).dt.tz_convert(jst)  # タイムゾーン変換
    df['Date'] = df['Date'].dt.strftime('%Y-%m-%d %H:%M:%S')  # タイムゾーン情報を削除
else:
    print("エラー: 'Date' カラムが見つかりません。カラム名を確認してください。")

# 変換後のCSVを保存
df.to_csv(output_file, index=False, encoding='utf-8-sig')

print(f"変換完了: {output_file} に保存されました")

4. カラム名のチェックについて

このスクリプトでは、if 'Date' in df.columns:Date カラムが存在するかどうかをチェックしています。

なぜカラム名のチェックが必要か?

  • CSVファイルによっては、列名が 大文字・小文字の違い不要なスペース で異なることがあります。
  • 例えば、CSVファイルのカラム名が "date"(小文字)や " Date "(空白付き)だった場合、スクリプトが正しく動作しない可能性があります。

カラム名を事前に確認する方法

スクリプト内で print(df.columns.tolist()) を実行すると、実際のカラム名を一覧で確認できます。

また、カラム名を統一するために、以下のように 小文字変換 & 空白削除 をする方法もあります。

# カラム名を小文字に変換し、空白を削除
df.columns = df.columns.str.strip().str.lower()

# 小文字に変換したカラム名でチェック
if 'date' in df.columns:

この方法を使えば、カラム名の違いによるエラーを防ぐことができます。


5. スクリプトの実行

仮想環境を有効化している場合は source myenv/bin/activate した後に、以下のコマンドで実行します。

python convert_utc_to_jst.py

6. 変換後の結果

スクリプトを実行すると、JST に変換されたデータが output_jst.csv に保存されます。

output_jst.csv(変換後)

IDTitleDate (JST)
1Sample 12025-03-14 01:17:56
2Sample 22025-03-14 03:30:45

変換結果:

  • 2025-03-13 16:17:56 UTC2025-03-14 01:17:56 JST
  • 2025-03-13 18:30:45 UTC2025-03-14 03:30:45 JST

UTC の時刻に +9時間 が加算され、日本時間になっています。


7. まとめ

このスクリプトを活用すれば、UTC の日時データを簡単に JST に変換できます。

ポイント

  • pandaspytz を使って簡単にタイムゾーン変換
  • .dt.tz_localize(utc).dt.tz_convert(jst) で変換処理
  • .dt.strftime('%Y-%m-%d %H:%M:%S') でタイムゾーン情報を削除
  • カラム名のチェックを行い、エラーを防止

カラム名の違いによるエラーを防ぐため、print(df.columns.tolist()) で事前に確認することが重要です。


8. さらに便利な使い方

  • スクリプトを関数化して、他のプロジェクトでも使いやすくする
  • argparse を使って、コマンドライン引数でファイル名を指定できるようにする
  • 他のタイムゾーン(PST, EST, GMT など)にも対応する

コメント

タイトルとURLをコピーしました