2025年7月31日
DateTimeを日本標準時(JST、UTC+09:00)でフォーマットする方法C#でWeb APIやログ出力を行う際、ISO 8601形式のタイムスタンプが必要になることが多くあります。特に日本時間(JST)を明示的に含める場合は以下のようなフォーマットが一般的です。
2025-06-09T15:30:45.123+09:00
.NETのDateTimeやDateTimeOffsetを使ってこの形式に変換する際、和暦設定による「令和07年」問題や、URLへの安全な埋め込み(エンコード)などに注意が必要です。
まずは日本時間(UTC+9)を明示的に扱う方法です。
using System;
DateTime localDateTime = DateTime.Now;
var jstOffset = new TimeSpan(9, 0, 0);
var jstDateTime = new DateTimeOffset(localDateTime, jstOffset);
string formatted = jstDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fffzzz");
Console.WriteLine(formatted);
出力例:
2025-06-09T15:30:45.123+09:00
ここで zzz はタイムゾーンの +09:00 を表します。
日本語Windowsではロケール設定がja-JP(日本語)かつ和暦が有効になっている場合、yyyy が「令和07年」など和暦表示になります。
InvariantCulture を指定して西暦強制using System.Globalization;
string formatted = jstDateTime.ToString(
"yyyy-MM-dd'T'HH:mm:ss.fffzzz",
CultureInfo.InvariantCulture
);
ja-JPのまま西暦カレンダーを指定var jaCulture = new CultureInfo("ja-JP");
jaCulture.DateTimeFormat.Calendar = new GregorianCalendar();
string formatted = jstDateTime.ToString(
"yyyy-MM-dd'T'HH:mm:ss.fffzzz",
jaCulture
);
ISO8601形式の日時には /, : などのURL予約文字が含まれています。そのままGETリクエストのクエリに含めると、正しく解析されません。
using System.Net;
string dateString = "2025-06-09T15:30:45.123+09:00";
string encoded = WebUtility.UrlEncode(dateString);
string url = $"https://example.com/api?datetime={encoded}";
Console.WriteLine(url);
出力:
https://example.com/api?datetime=2025-06-09T15%3A30%3A45.123%2B09%3A00
| 項目 | 解説 |
|---|---|
| JST指定 | DateTimeOffsetでUTC+09:00を明示 |
| 和暦回避 | InvariantCultureまたは西暦カレンダーを指定 |
| ISO 8601形式 | "yyyy-MM-ddTHH:mm:ss.fffzzz" フォーマット |
| URLクエリパラメータ対応 | WebUtility.UrlEncodeを使う |
DateTimeをISO準拠で日本時間として安全に扱うには、カルチャ設定とURLエンコードの正しい理解が重要です。
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了
RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて
PowerShellでGrapheme Clusterについて処理を考える
業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法
【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法
【C# .NET 8 対応】List<string> を重複なしでマージする方法|
【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き
【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet
WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法
System.Text.Json 9.0.0.0 で FileNotFoundException
C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】
C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法