Last active
February 25, 2026 11:36
-
-
Save ufcpp/8c1db60faa2bc6b4803606de8edb3da4 to your computer and use it in GitHub Desktop.
DateTime.Parse のヒューリスティックスとカルチャー依存と CJK 特別扱いっぷり
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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