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

パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに

出典: C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり3パターンのコード比較 (動作確認つき) / パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに

パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに (csharp)#c52514aef32b
using System.Globalization;
 
string[] inputs = { "2026/05/19", "2026-05-19", "2026/5/19", "05/19/2026" };
 
// NG パターン: DateTime.TryParse — ロケール依存
var jp = new CultureInfo("ja-JP");
var us = new CultureInfo("en-US");
 
Console.WriteLine("--- DateTime.TryParse (ロケール依存) ---");
foreach (var s in inputs) {
    var okJp = DateTime.TryParse(s, jp, DateTimeStyles.None, out var dtJp);
    var okUs = DateTime.TryParse(s, us, DateTimeStyles.None, out var dtUs);
    Console.WriteLine($"  '{s}' → ja-JP={okJp,-5} ({(okJp ? dtJp.ToString("yyyy-MM-dd") : "NG")})  en-US={okUs,-5} ({(okUs ? dtUs.ToString("yyyy-MM-dd") : "NG")})");
}
 
// OK パターン: TryParseExact + InvariantCulture
Console.WriteLine("--- DateTime.TryParseExact + InvariantCulture (固定) ---");
string[] formats = { "yyyy/MM/dd", "yyyy/M/d", "yyyy-MM-dd" };
foreach (var s in inputs) {
    var ok = DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out var dt);
    Console.WriteLine($"  '{s}' → {(ok ? $"OK ({dt:yyyy-MM-dd})" : "NG (フォーマット不一致)")}");
}
▸ 実行ボタンで結果を表示
  • id: #c52514aef32b
  • lines: 22
  • extracted: 2026-06-10
  • captured: 2026-06-04

Source収録記事

この snippet は記事の「3パターンのコード比較 (動作確認つき) / パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

4
図鑑トップ