C#DateTime.ParseExact确定年前缀

Tro*_*ick 4 c# datetime date

我有一个关于解析"dd/MM/yy"形式的日期字符串的要求,这样如果认为年份比当前年份大30年,那么它将在年份前加上19.在另一个例子中它是以20为前缀.

例子:

01/01/50 - > 01/01/1950
01/01/41 - > 01/01/2041

我不确定DateTime.ParseExact如何决定它应该使用什么前缀或者我如何以某种方式强制它(它似乎做出了明智的假设,因为01/01/12 - > 01/01/2012,I只是不知道如何决定它将切换的点.

Ani*_*Ani 6

使用该Calendar.TwoDigitYearMax属性.

获取或设置100年范围的最后一年,可以用两位数年份表示.

在你的情况下,这样的事情会起作用:

// Setup 
var cultureInfo = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
var calendar = cultureInfo.Calendar;
calendar.TwoDigitYearMax = DateTime.Now.Year + 30;
cultureInfo.DateTimeFormat.Calendar = calendar;

// Parse
var _1950 = DateTime.ParseExact("01/01/50", "dd/MM/yy", cultureInfo);
var _2041 = DateTime.ParseExact("01/01/41", "dd/MM/yy", cultureInfo);
Run Code Online (Sandbox Code Playgroud)