【保存版】日時フォーマット指定完全ガイド|言語別サンプル・国際化対応まで徹底解説

プログラミング・IT

「ログファイルに日時を記録したいけど、フォーマット指定の書き方がわからない」
「YYYY-MM-DD形式とMM/DD/YYYY形式、どちらを使うべき?」

日時のフォーマット指定は、プログラミング、システム開発、データ処理、文書作成など、あらゆる場面で必要になる重要なスキルです。

しかし、言語やツールによって記法が異なるため、混乱しやすいのも事実です。

この記事では、日時フォーマット指定の基礎から実践までを体系的に解説し、主要プログラミング言語での実装例、国際化対応、よくあるトラブルの解決方法まで包括的にカバーします。

スポンサーリンク

日時フォーマットの基礎知識

日時フォーマットとは

日時フォーマットとは、コンピューター内部で管理されている日時データを、人間が読みやすい形式や特定の規則に従った形式で表示・保存するためのルール体系です。

なぜフォーマット指定が重要なのか

データの一貫性確保

  • 同じシステム内で統一された日時表記
  • データベースでの検索・ソート処理の効率化
  • ファイル名の規則的な命名

国際化対応

  • 異なる地域のユーザーに適した表示
  • タイムゾーンを考慮した時刻表示
  • 多言語環境での日時処理

システム間連携

  • API通信での標準的な日時フォーマット
  • ログファイルの解析・処理
  • データ移行時の形式統一

基本的な表記パターン

同じ日時(2025年5月20日 午後2時30分45秒)の様々な表記例:

ISO 8601標準:     2025-05-20T14:30:45Z
日本式:          2025年5月20日 14時30分45秒
アメリカ式:       05/20/2025 2:30:45 PM
ヨーロッパ式:     20/05/2025 14:30:45
ファイル名用:     20250520_143045
SQL DATETIME:    2025-05-20 14:30:45
RFC 2822:        Mon, 20 May 2025 14:30:45 +0900
UNIX Timestamp:  1747712245

標準的なフォーマット記号一覧

基本的な記号体系

多くのシステムで共通して使用される記号パターン:

カテゴリ記号意味備考
YYYY, yyyy年(4桁)2025標準的な年表記
YY, yy年(2桁)252000年問題に注意
MM月(2桁ゼロ埋め)05, 1201-12
M月(1-2桁)5, 121-12
MMM月名略称Jan, May英語環境
MMMM月名完全形January, May英語環境
DD, dd日(2桁ゼロ埋め)09, 2001-31
D, d日(1-2桁)9, 201-31
時間HH時(24時間制、2桁)00, 14, 2300-23
H時(24時間制、1-2桁)0, 14, 230-23
hh時(12時間制、2桁)01, 02, 1201-12
h時(12時間制、1-2桁)1, 2, 121-12
分・秒mm分(2桁ゼロ埋め)07, 30, 5900-59
m分(1-2桁)7, 30, 590-59
ss秒(2桁ゼロ埋め)05, 45, 5900-59
s秒(1-2桁)5, 45, 590-59
その他AM/PM, a午前/午後指示子AM, PM12時間制で使用
ZUTC指示子ZISO 8601準拠
±HHMMタイムゾーンオフセット+0900, -0500UTC からの差

特殊な記号・拡張記号

記号意味使用場面
SSS, fffミリ秒123, 456高精度時刻
EEEE曜日名(完全形)Monday, Tuesday英語環境
EEE曜日名(略称)Mon, Tue英語環境
w年内での週番号21ISO週番号
DDD年内での日番号1401-366

プログラミング言語別実装ガイド

Python

Pythonでは主にdatetimeモジュールのstrftime()strptime()を使用します。

基本的な使用方法

from datetime import datetime, timezone
import locale

# 現在時刻の取得
now = datetime.now()

# 基本的なフォーマット
print(now.strftime("%Y-%m-%d"))           # 2025-05-20
print(now.strftime("%Y/%m/%d %H:%M:%S"))  # 2025/05/20 14:30:45
print(now.strftime("%B %d, %Y"))          # May 20, 2025

# 日本語ロケールでの表示
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(now.strftime("%Y年%m月%d日"))        # 2025年05月20日
print(now.strftime("%A"))                 # 火曜日

# 文字列から日時オブジェクトへの変換
date_string = "2025-05-20 14:30:45"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")

Pythonの主要フォーマット記号

# Pythonの strftime フォーマット記号
formats = {
    "%Y": "年(4桁)",      # 2025
    "%y": "年(2桁)",      # 25  
    "%m": "月(2桁)",      # 05
    "%B": "月名(完全)",   # May
    "%b": "月名(略称)",   # May
    "%d": "日(2桁)",      # 20
    "%H": "時(24時間)",   # 14
    "%I": "時(12時間)",   # 02
    "%M": "分",          # 30
    "%S": "秒",          # 45
    "%p": "AM/PM",       # PM
    "%A": "曜日(完全)",   # Tuesday
    "%a": "曜日(略称)",   # Tue
    "%j": "年内日数",     # 140
    "%U": "年内週数",     # 20
    "%Z": "タイムゾーン", # JST
}

# 実用例
now = datetime.now()
for code, desc in formats.items():
    print(f"{code:4} ({desc:8}): {now.strftime(code)}")

タイムゾーン対応

from datetime import datetime, timezone, timedelta

# UTC時刻
utc_now = datetime.now(timezone.utc)
print(utc_now.strftime("%Y-%m-%d %H:%M:%S %Z"))  # 2025-05-20 05:30:45 UTC

# 日本時間(JST)
jst = timezone(timedelta(hours=9))
jst_now = datetime.now(jst)
print(jst_now.strftime("%Y-%m-%d %H:%M:%S %z"))  # 2025-05-20 14:30:45 +0900

# ISO 8601フォーマット
print(jst_now.isoformat())  # 2025-05-20T14:30:45+09:00

JavaScript

JavaScriptでは組み込みのDateオブジェクトとIntl.DateTimeFormat、またはライブラリを使用します。

基本的な使用方法

// 現在時刻の取得
const now = new Date();

// 基本的なメソッド
console.log(now.toISOString());        // 2025-05-20T05:30:45.123Z
console.log(now.toDateString());       // Tue May 20 2025
console.log(now.toTimeString());       // 14:30:45 GMT+0900 (JST)
console.log(now.toLocaleString());     // 2025/5/20 14:30:45

// ロケール指定でのフォーマット
console.log(now.toLocaleString('ja-JP')); // 2025/5/20 14:30:45
console.log(now.toLocaleString('en-US')); // 5/20/2025, 2:30:45 PM
console.log(now.toLocaleString('de-DE')); // 20.5.2025, 14:30:45

Intl.DateTimeFormatを使用した高度なフォーマット

const now = new Date();

// 詳細なフォーマット指定
const formatter = new Intl.DateTimeFormat('ja-JP', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    timeZone: 'Asia/Tokyo'
});

console.log(formatter.format(now)); // 2025/05/20 14:30:45

// より詳細なオプション
const detailedFormatter = new Intl.DateTimeFormat('en-US', {
    weekday: 'long',
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    hour: '2-digit',
    minute: '2-digit',
    timeZoneName: 'short'
});

console.log(detailedFormatter.format(now)); // Tuesday, May 20, 2025 at 02:30 PM JST

Day.jsライブラリを使用した例

// Day.js を使用(CDNまたはnpm install dayjs)
const dayjs = require('dayjs');

const now = dayjs();

console.log(now.format('YYYY-MM-DD'));           // 2025-05-20
console.log(now.format('YYYY/MM/DD HH:mm:ss'));  // 2025/05/20 14:30:45
console.log(now.format('MMMM DD, YYYY'));        // May 20, 2025
console.log(now.format('dddd'));                 // Tuesday

// 文字列からの解析
const parsed = dayjs('2025-05-20 14:30:45');
console.log(parsed.format('YYYY年MM月DD日'));    // 2025年05月20日

Java

Javaではjava.timeパッケージ(Java 8以降)または従来のSimpleDateFormatを使用します。

java.time パッケージ(推奨)

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTimeFormatExample {
    public static void main(String[] args) {
        // 現在時刻の取得
        LocalDateTime now = LocalDateTime.now();
        ZonedDateTime zonedNow = ZonedDateTime.now();
        
        // 基本的なフォーマット
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println(now.format(formatter1)); // 2025-05-20
        
        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        System.out.println(now.format(formatter2)); // 2025/05/20 14:30:45
        
        // ロケール指定
        DateTimeFormatter jpFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日", Locale.JAPANESE);
        System.out.println(now.format(jpFormatter)); // 2025年05月20日
        
        // ISO形式
        System.out.println(zonedNow.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
        // 2025-05-20T14:30:45.123+09:00[Asia/Tokyo]
        
        // 文字列から日時への変換
        String dateString = "2025-05-20 14:30:45";
        LocalDateTime parsed = LocalDateTime.parse(dateString, 
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

SimpleDateFormat(レガシー)

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class SimpleDateFormatExample {
    public static void main(String[] args) {
        Date now = new Date();
        
        // 基本的なフォーマット
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf1.format(now)); // 2025-05-20 14:30:45
        
        // 日本語ロケール
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 EEEE", Locale.JAPANESE);
        System.out.println(sdf2.format(now)); // 2025年05月20日 火曜日
        
        // アメリカ形式
        SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US);
        System.out.println(sdf3.format(now)); // 05/20/2025 02:30:45 PM
    }
}

PHP

PHPではdate()関数、DateTimeクラス、DateTimeImmutableクラスを使用します。

基本的な使用方法

<?php
// 現在時刻でのフォーマット
echo date('Y-m-d');           // 2025-05-20
echo date('Y/m/d H:i:s');     // 2025/05/20 14:30:45
echo date('F j, Y');          // May 20, 2025
echo date('l, F j, Y');       // Tuesday, May 20, 2025

// DateTimeクラスの使用
$now = new DateTime();
echo $now->format('Y-m-d H:i:s');  // 2025-05-20 14:30:45

// タイムゾーンの指定
$tokyo = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
echo $tokyo->format('Y-m-d H:i:s P'); // 2025-05-20 14:30:45 +09:00

// 文字列からの変換
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2025-05-20 14:30:45');
echo $date->format('F j, Y'); // May 20, 2025

// 日本語での表示(ロケール設定が必要)
setlocale(LC_TIME, 'ja_JP.UTF-8');
echo strftime('%Y年%m月%d日'); // 2025年05月20日
?>

PHPの主要フォーマット文字

<?php
$formats = [
    'Y' => '年(4桁)',     // 2025
    'y' => '年(2桁)',     // 25
    'm' => '月(2桁)',     // 05
    'n' => '月(1-2桁)',   // 5
    'F' => '月名(完全)',   // May
    'M' => '月名(略称)',   // May
    'd' => '日(2桁)',     // 20
    'j' => '日(1-2桁)',   // 20
    'H' => '時(24時間)',   // 14
    'h' => '時(12時間)',   // 02
    'i' => '分',          // 30
    's' => '秒',          // 45
    'A' => 'AM/PM(大)',   // PM
    'a' => 'am/pm(小)',   // pm
    'l' => '曜日(完全)',   // Tuesday
    'D' => '曜日(略称)',   // Tue
    'P' => 'タイムゾーン', // +09:00
];

$now = new DateTime();
foreach ($formats as $code => $desc) {
    printf("%s (%s): %s\n", $code, $desc, $now->format($code));
}
?>

C#

C#ではDateTime構造体とToString()メソッド、またはDateTimeOffsetを使用します。

基本的な使用方法

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        DateTime now = DateTime.Now;
        
        // 基本的なフォーマット
        Console.WriteLine(now.ToString("yyyy-MM-dd"));        // 2025-05-20
        Console.WriteLine(now.ToString("yyyy/MM/dd HH:mm:ss")); // 2025/05/20 14:30:45
        Console.WriteLine(now.ToString("MMMM dd, yyyy"));     // May 20, 2025
        
        // 標準フォーマット文字列
        Console.WriteLine(now.ToString("d"));  // 2025/05/20 (短い日付)
        Console.WriteLine(now.ToString("D"));  // 2025年5月20日 (長い日付)
        Console.WriteLine(now.ToString("f"));  // 2025年5月20日 14:30 (完全)
        Console.WriteLine(now.ToString("F"));  // 2025年5月20日 14:30:45 (完全)
        
        // カルチャ指定
        CultureInfo japanese = new CultureInfo("ja-JP");
        Console.WriteLine(now.ToString("yyyy年MM月dd日", japanese)); // 2025年05月20日
        
        CultureInfo english = new CultureInfo("en-US");
        Console.WriteLine(now.ToString("MMMM dd, yyyy", english));   // May 20, 2025
        
        // ISO 8601形式
        Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ")); // 2025-05-20T14:30:45.123Z
        
        // DateTimeOffsetの使用(タイムゾーン対応)
        DateTimeOffset offsetNow = DateTimeOffset.Now;
        Console.WriteLine(offsetNow.ToString("yyyy-MM-dd HH:mm:ss zzz")); // 2025-05-20 14:30:45 +09:00
    }
}

アプリケーション・ツール別設定方法

Microsoft Excel

Excelでは「セルの書式設定」から日時フォーマットを指定できます。

基本的な設定方法

  1. 対象セルを選択
  2. 右クリック → 「セルの書式設定」
  3. 「表示形式」タブ → 「日付」もしくは「時刻」の形式
  4. 書式コードを入力

Excelの書式コード例

yyyy/mm/dd          → 2025/05/20
yyyy"年"m"月"d"日"    → 2025年5月20日
mm/dd/yyyy          → 05/20/2025
dd-mmm-yyyy         → 20-May-2025
yyyy/mm/dd hh:mm:ss → 2025/05/20 14:30:45
hh:mm AM/PM         → 02:30 PM
[h]:mm:ss           → 時間の積算表示

高度な書式設定

# 条件付き書式
[>100]"高";"低"                    # 100より大きい場合「高」、そうでなければ「低」
[赤]yyyy/mm/dd;[青]yyyy/mm/dd      # 正数は赤、負数は青で表示

# 曜日付き日付
yyyy/mm/dd"("aaa")"               # 2025/05/20(火)
yyyy/mm/dd"("aaaa")"              # 2025/05/20(火曜日)

# 和暦
ggge"年"m"月"d"日"                 # 令和7年5月20日

データベース(SQL)

MySQL

-- 現在時刻のフォーマット
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');  -- 2025-05-20 14:30:45
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');        -- 2025年05月20日

-- テーブルデータのフォーマット
SELECT DATE_FORMAT(created_at, '%Y/%m/%d') as formatted_date 
FROM users;

PostgreSQL

-- 現在時刻のフォーマット
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS');  -- 2025-05-20 14:30:45
SELECT TO_CHAR(NOW(), 'YYYY"年"MM"月"DD"日"');     -- 2025年05月20日

-- テーブルデータのフォーマット
SELECT TO_CHAR(created_at, 'YYYY/MM/DD') as formatted_date 
FROM users;

SQLServer

-- 現在時刻のフォーマット
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');  -- 2025-05-20 14:30:45
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日');        -- 2025年05月20日

-- CONVERT関数の使用
SELECT CONVERT(VARCHAR, GETDATE(), 120);  -- 2025-05-20 14:30:45 (ISO形式)

Linuxコマンドライン

dateコマンド

# 基本的な使用方法
date                              # Tue May 20 14:30:45 JST 2025
date '+%Y-%m-%d'                  # 2025-05-20
date '+%Y/%m/%d %H:%M:%S'         # 2025/05/20 14:30:45
date '+%Y年%m月%d日'               # 2025年05月20日

# 特定の時刻の指定
date -d '2025-05-20 14:30:45' '+%Y年%m月%d日 %H時%M分'  # 2025年05月20日 14時30分

# ファイル名用のフォーマット
date '+%Y%m%d_%H%M%S'             # 20250520_143045

# ログ用のフォーマット
date '+[%Y-%m-%d %H:%M:%S]'       # [2025-05-20 14:30:45]

国際化と地域化の考慮事項

地域別の日付表記習慣

主要地域の標準的な日付フォーマット

地域日付順序区切り文字特徴
日本年/月/日/ もしくは -2025/05/20年から順に大きい単位
アメリカ月/日/年/05/20/2025月が最初
ヨーロッパ日/月/年/ もしくは .20/05/2025日が最初
中国年-月-日-2025-05-20ISO準拠
インド日-月-年- もしくは /20-05-2025イギリス式準拠

ISO 8601国際標準

ISO 8601は国際標準化機構が定めた日時表記の国際標準です。

基本形式

日付:           2025-05-20
時刻:           14:30:45
日時:           2025-05-20T14:30:45
タイムゾーン付き: 2025-05-20T14:30:45+09:00
UTC時刻:        2025-05-20T05:30:45Z
週単位:         2025-W21 (2025年第21週)
年間日数:       2025-140 (2025年の140日目)

ISO 8601使用のメリット

  • グローバルで統一された表記
  • 文字列として辞書順ソートが可能
  • データベースでの標準的な形式
  • APIでの標準的な日時交換形式

タイムゾーンの考慮

主要タイムゾーンの表記

UTC (協定世界時):   2025-05-20T05:30:45Z
JST (日本標準時):   2025-05-20T14:30:45+09:00
EST (東部標準時):   2025-05-20T00:30:45-05:00
PST (太平洋標準時): 2025-05-19T21:30:45-08:00
GMT (グリニッジ標準時): 2025-05-20T05:30:45+00:00

タイムゾーン対応のベストプラクティス

# Python での例
from datetime import datetime, timezone, timedelta

# 常にタイムゾーン情報付きで保存
utc_time = datetime.now(timezone.utc)
stored_time = utc_time.isoformat()  # 2025-05-20T05:30:45+00:00

# ユーザーのタイムゾーンで表示
user_tz = timezone(timedelta(hours=9))  # JST
local_time = utc_time.astimezone(user_

まとめ

  • フォーマット指定とは、日付・時間の表示形式を制御すること
  • よく使う記号:yyyy, MM, dd, HH, mm, ss など
  • Python、JavaScript、PHP、Excelなど言語ごとに記法が異なる

ロケールやタイムゾーンの影響にも注意 フォーマットを自由に操れるようになれば、開発や資料作成の質が一段と向上します

コメント

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