タイトル: ブループリントで現在日時を取得する方法
SEOタイトル: UE5 ブループリント 現在日時取得 完全ガイド(Now / UtcNow / Today / DateTime / Timespan / フォーマット / タイムゾーン)
| この記事の要点 |
|
UE5 で「現在日時」を取得する方法
UE5 のブループリントで現在日時を取得するには、用途に応じて複数のノードを使い分けます。代表的なのは Now(ローカル)、Utc Now(UTC)、Today(時刻 0 の今日)です。
主要ノード
| ノード | 戻り値 | 意味 |
|---|---|---|
| Now | DateTime | ローカルタイムでの現在日時 |
| Utc Now | DateTime | UTC(協定世界時)での現在日時 |
| Today | DateTime | 本日 00:00:00(ローカル) |
| Get Year / Month / Day | int | DateTime から日付成分 |
| Get Hour / Minute / Second / Millisecond | int | 時刻成分 |
| Get Day of Week | enum | 曜日(Monday … Sunday) |
| To String (DateTime) | String | 既定フォーマット文字列 |
| ToFormattedString | String | strftime 風書式で文字列化 |
| Get Game Time in Seconds | float | ゲーム内経過時間(実時刻ではない) |
基本: 現在日時を取って Print する
- イベントグラフで Event BeginPlay を配置
- Now ノードを追加して接続
- 戻り値を To String (DateTime) に通す
- Print String で表示
これで画面に「2026.06.11-14.30.55」のような既定形式が表示されます。
各成分を取り出す
例えば「いま 14:30」だけ取りたい場合:
- Now → 出力を分岐
- 片方を Get Hour、もう片方を Get Minute
- 整数を文字列化して連結 → Print String
書式指定して文字列化
ToFormattedString ノードは Linux の strftime に似た書式を取ります。
| 書式 | 意味 | 例 |
|---|---|---|
%Y | 4 桁年 | 2026 |
%y | 2 桁年 | 26 |
%m | 2 桁月 | 06 |
%d | 2 桁日 | 11 |
%H | 24 時表記の時 | 14 |
%M | 分 | 30 |
%S | 秒 | 55 |
%A | 曜日(英語フル) | Thursday |
例: %Y-%m-%d %H:%M:%S → 2026-06-11 14:30:55
セーブデータ / ログ向きの形式
ログ・ファイル名向きには To String (Iso 8601) や %Y%m%dT%H%M%S を使うとソート可能で扱いやすくなります。
時間差を取る(Timespan)
DateTime 同士を引き算すると Timespan が返ります。
- 2 つの DateTime(例: Now と セーブ時刻)を引き算ノード(
-)に入れる - 出力 Timespan を Get Total Seconds / Get Total Minutes / Get Total Hours へ
「前回起動から何時間経った?」「タイマー残り何秒?」に便利。
ローカル時刻と UTC を使い分ける
| 用途 | 推奨 |
|---|---|
| 画面表示(ユーザーが見る) | Now(ローカル) |
| サーバとの時刻同期 | UtcNow |
| セーブデータ / ログ | UtcNow(端末跨ぎでズレない) |
| イベント期間判定(全世界共通) | UtcNow + 期間を UTC で定義 |
注意: 実時刻とゲーム時間は別物
UE5 の時間関連ノードには大きく 2 系統あります。混同するとバグります。
| 系統 | 取得ノード | 性質 |
|---|---|---|
| 実時刻(壁時計) | Now / UtcNow / Today | OS の時計。一時停止しても進む |
| ゲーム内経過時間 | Get Game Time in Seconds / Get Time Seconds | ワールド開始からの経過。Pause Game で止まる |
| フレーム差分 | Get World Delta Seconds / Event Tick の Delta Seconds | 毎フレームの経過時間 |
「ゲーム内タイマーで 60 秒後に何かする」は Game Time、「実世界で何時間プレイしたか」「日付をまたいだか」は Now / UtcNow を使います。
「日付が変わったか」判定
- セーブデータに前回起動時の Today(DateTime)を保存
- 起動時に Today を取得
- 2 つを比較(
!=)して true なら日次リセット処理
C++ での同等処理
FDateTime Now = FDateTime::Now(); // ローカル
FDateTime UtcNow = FDateTime::UtcNow(); // UTC
FDateTime Today = FDateTime::Today(); // 0:00:00 の今日
int32 Year = Now.GetYear();
int32 Hour = Now.GetHour();
EDayOfWeek W = Now.GetDayOfWeek();
FString S = Now.ToString(TEXT("%Y-%m-%d %H:%M:%S"));
FDateTime A, B;
FTimespan Diff = A - B;
double Sec = Diff.GetTotalSeconds();
FAQ
Q: Now はリプレイで再生時刻と同じになる?
A: いいえ、リプレイでも Now は実時刻を返します。リプレイ位置に同期したいならゲーム時間側を使います。
Q: Now はパッケージ版でも動く?
A: 動きます。OS の時計を読むので、改ざんされやすい点だけ注意(実績や課金チェックはサーバ時刻で)。
Q: ミリ秒精度が欲しい
A: Get Millisecond で 0-999 のミリ秒成分が取れます。ベンチマークなら FPlatformTime::Seconds()(C++)か Get Game Time in Seconds を使うほうが扱いやすい。
関連
- ブループリント — 親カテゴリ
- DateTime 構造体 / Timespan 構造体
- Get Game Time in Seconds / Set Timer by Function Name
- Save Game / SaveGameToSlot
- Print String / Append(文字列連結)