我正在尝试将两位数的年份解析为两位数int
,但以下代码为我提供了2001年:
var date = DateTime.ParseExact("29NOV01", "ddMMMyy", CultureInfo.InvariantCulture)
var year = date.Year; // .ToString("D4") = 2001 instead of 0001
有没有办法改变这种行为?我宁愿不再在字符串中添加两个零,只是为了让它起作用。
答案 0 :(得分:5)
如果有两位数,则使用的世纪包含在CultureInfo
:
var culture = (CultureInfo)CultureInfo.InvariantCulture.Clone();
culture.Calendar.TwoDigitYearMax = 100;
DateTime dt = DateTime.ParseExact("29NOV99", "ddMMMyy", culture);
请记住:
DateTime dt = DateTime.ParseExact("01JAN00", "ddMMMyy", culture);
将被解析为0100年1月1日。或者你可以
culture.Calendar.TwoDigitYearMax = 99;
但是ParseExact
会引发异常,因为0000年1月1日的日期不能用DateTime
表示({1}} 01月1日{/ p}
答案 1 :(得分:4)
DateTime
结构存储实际年份,而不是解析您提供的任何字符串时找到的值。
如果你只想要没有世纪的部分,为什么不这样做呢:
var date = DateTime.ParseExact("29NOV01", "ddMMMyy", CultureInfo.InvariantCulture);
var year = date.Year % 100;
或作为字符串:
var year = date.ToString("yy");