我正在尝试读入一种格式非常旧的文件。
其中日期格式指定为 yymmdd 格式,其中 [00, 59] 范围内的 2 位年份被认为是 21 世纪,[60, 99] 范围内的年份被认为是被认为是在 20 世纪,因此 59 代表 2059 年,60 代表 1960 年。
我如何将其解析为 C# 中的 DateTime
?
我试过:
string str = ReadDateFromFile();
DateTime dt;
DateTime.TryParseExact(str, "yyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
但默认的两位数年份规则将 [00, 29] 范围内的值视为 21 世纪,将 [30, 99] 范围内的值视为 20 世纪。
有没有一种方法可以修改此行为以执行我想要的操作,或者我可以使用其他技术吗?
只需将世纪前缀附加到您的字符串,然后更改格式字符串以解析四位数年份
string str = ReadDateFromFile();
if (int.Parse(str.Substring(0, 2) >= 60)
str = "19" + str;
else
str = "20" + str;
DateTime dt;
DateTime.TryParseExact(str, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
可以修改Calendar.TwoDigitYearMax并使用修改后的文化进行解析
var myCulture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
myCulture.Calendar.TwoDigitYearMax = 2059;
DateTime dt;
DateTime.TryParseExact(str, "yyMMdd", myCulture, DateTimeStyles.None, out dt);