DateTime.ParseExact可以创建1年从01而不是2001年与yy?

时间:2015-03-11 13:24:56

标签: c# datetime

我正在尝试将两位数的年份解析为两位数int,但以下代码为我提供了2001年:

var date = DateTime.ParseExact("29NOV01", "ddMMMyy", CultureInfo.InvariantCulture)

var year = date.Year; // .ToString("D4") = 2001 instead of 0001

有没有办法改变这种行为?我宁愿不再在字符串中添加两个零,只是为了让它起作用。

2 个答案:

答案 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");