動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

定石1: DateTime.Kindの3つの罠(Local / Utc / Unspecified)

出典: C# DateTime と DateTimeOffset の違い・タイムゾーン処理の正解(業務SE本番事故編)定石1: DateTime.Kindの3つの罠(Local / Utc / Unspecified)

定石1: DateTime.Kindの3つの罠(Local / Utc / Unspecified) (csharp)#05c39f91324d
// ✅定石1: DateTime.Kindの3パターン
var local = DateTime.Now;                                  // Kind=Local
var utc   = DateTime.UtcNow;                                // Kind=Utc
var unsp  = new DateTime(2026, 5, 8, 14, 30, 0);            // Kind=Unspecified
 
Console.WriteLine($"Local: {local.Kind}");      // Local
Console.WriteLine($"Utc  : {utc.Kind}");        // Utc
Console.WriteLine($"Unsp : {unsp.Kind}");       // Unspecified
 
// ❌罠: UnspecifiedをToUniversalTime()するとLocalとみなされる
var converted = unsp.ToUniversalTime();         //内部でLocalとみなして変換
Console.WriteLine($"Converted: {converted}");   // JST環境なら-9時間されてる
 
// ✅正しい書き方:明示的にKindを指定
var jstUnsp = DateTime.SpecifyKind(unsp, DateTimeKind.Local);
var jstUtc  = jstUnsp.ToUniversalTime();        //期待通りの変換
▸ 実行ボタンで結果を表示
  • id: #05c39f91324d
  • lines: 16
  • extracted: 2026-06-10
  • captured: 2026-06-04

Source収録記事

この snippet は記事の「定石1: DateTime.Kindの3つの罠(Local / Utc / Unspecified)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

6
図鑑トップ