Skip to content

Instantly share code, notes, and snippets.

@ufcpp
Last active February 25, 2026 11:36
Show Gist options
  • Select an option

  • Save ufcpp/8c1db60faa2bc6b4803606de8edb3da4 to your computer and use it in GitHub Desktop.

Select an option

Save ufcpp/8c1db60faa2bc6b4803606de8edb3da4 to your computer and use it in GitHub Desktop.
DateTime.Parse のヒューリスティックスとカルチャー依存と CJK 特別扱いっぷり
using System.Globalization;
ParseDate("01/02/03"); // culture dependent
ParseDate("1 2 3"); // the same as 01/02/03
ParseDate("2001/02/03"); // always 2001-02-03
ParseDate("01-02-03 04:05:06+7"); // culture dependent
ParseDate("001.2.3"); // always 0001-02-03
ParseDate("1.2.03"); // culture dependent
ParseDate("1.2.003"); // always 0003-02-01
ParseDate("1.002.3"); // always 0002-01-03
ParseDate("feb.1 3"); // culture dependent, 2003-02-01 (lit, mid) or 2001-02-03 (big)
ParseDate("1.feb 3"); // culture dependent, 2003-02-01 (lit, mid) or 2001-02-03 (big)
ParseDate("1日2月3年"); // always 2003-02-01
ParseDate("1日2月003年"); // always 0003-02-01
ParseDate("1 feb 3年"); // always 2003-01-01, "feb" is ignored.
ParseDate("3年 4 feb"); // 2026-02-04 (lit, mid) or 2004-02-01 (big), "3年" is ignored.
ParseDate("2001-02-03T00:00:00"); // always 2001-02-03
ParseDate("05:06:07"); // today + hh:mm:ss
ParseDate("5pm"); // today + 17:00:00
ParseDate("5時"); // today + 05:00:00
ParseDate("5:0"); // today + 05:00:00
ParseDate("1년2월3일"); // 2001/02/03
ParseDate("1일2월3년"); // 2003/02/01
partial class Program
{
private readonly static CultureInfo BigEndian = new("ja");
private readonly static CultureInfo LittleEndian = new("fr");
private readonly static CultureInfo MiddleEndian = new("en");
static void ParseDate(string str)
{
Console.WriteLine($"- {str}");
Console.WriteLine(DateTimeOffset.Parse(str, BigEndian, DateTimeStyles.AssumeUniversal));
Console.WriteLine(DateTimeOffset.Parse(str, LittleEndian, DateTimeStyles.AssumeUniversal));
Console.WriteLine(DateTimeOffset.Parse(str, MiddleEndian, DateTimeStyles.AssumeUniversal));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment