Unity & C# 学習教材

補足: 現実時間の取得(DateTime と DateTimeOffset)

Time.time はゲーム時間を返しますが、現実の日時(システムクロック)が必要な場面では C# 標準ライブラリの DateTimeDateTimeOffset を使います。

このページは補足資料です。 セーブデータへのタイムスタンプ記録や、プレイ日時のログ出力などで役立ちます。

学習目標

このページを読み終えると、以下のことができるようになります。

前提知識


1. DateTime — 現在の日時を取得する

DateTime は C# 標準ライブラリ(System 名前空間)の型で、日付と時刻を表します。

DateTime.Now — 現在のローカル日時を返します。

書式:DateTime.Now プロパティ

1
public static DateTime Now { get; }
1
2
3
4
5
6
7
8
9
10
11
using System;
using UnityEngine;

public class RealTimeSample : MonoBehaviour
{
    private void Start()
    {
        Debug.Log(DateTime.Now);
        // 例: 04/06/2026 00:07:30
    }
}

DateTime.Now はタイムゾーン情報を持たないため、ローカル時刻なのか UTC なのかがコードから読み取りにくいという欠点があります。


2. DateTimeOffset — タイムゾーン情報付きの日時

DateTimeOffsetDateTime にUTCオフセット(時差)を加えた型です。タイムゾーンの情報が明示されるため、より安全に扱えます。

プロパティ 説明
DateTimeOffset.Now 現在のローカル日時(UTCオフセット付き)
DateTimeOffset.UtcNow 現在のUTC日時
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
using UnityEngine;

public class RealTimeSample : MonoBehaviour
{
    private void Start()
    {
        Debug.Log(DateTimeOffset.Now);
        // 例: 04/06/2026 00:07:30 +09:00

        Debug.Log(DateTimeOffset.UtcNow);
        // 例: 04/05/2026 15:07:30 +00:00
    }
}

UTCオフセット(+09:00 など)が含まれるため、異なるタイムゾーンの環境でも日時の意味が明確です。

💡 ポイント: 新しいコードでは DateTime より DateTimeOffset を使うことが推奨されています。特に複数地域でプレイされるゲームのセーブデータやログには DateTimeOffset.UtcNow が適しています。


3. 書式を指定して出力する

ToString に書式文字列を渡すと、出力形式を自由に指定できます。

1
2
3
4
5
6
7
8
9
10
11
12
using System;
using UnityEngine;

public class RealTimeSample : MonoBehaviour
{
    private void Start()
    {
        var now = DateTimeOffset.Now;
        Debug.Log(now.ToString("yyyy/MM/dd HH:mm:ss"));
        // 例: 2026/04/06 00:07:30
    }
}
書式指定子 意味
yyyy 4桁の年 2026
MM 2桁の月 04
dd 2桁の日 06
HH 24時間制の時 00
mm 07
ss 30

4. Time.time との違いのまとめ

  Time.time DateTimeOffset.Now
値の種類 ゲーム開始からの経過秒数(float 現実の日時
影響を受けるもの Time.timeScale システムクロック
主な用途 タイマー・アニメーション・ゲームロジック ログ・セーブデータのタイムスタンプ
名前空間 UnityEngine System

まとめ


次のステップ

Time クラスと時間制御 に戻り、ゲーム時間を使った duration 管理パターンを確認しましょう。