It looks to me like .NET is ignoring the TwoDigitYearMax property of the CultureInfo (IFormatProvider) I pass for parsing?
Specifically, I cannot explain why the last line of this says 1930, and not 2030. Can anyone reproduce or explain it?
Windows 7, .NET 4.0, en-US system settings.
using System;
using System.Globalization;
namespace DateTimeParse
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.Calendar.TwoDigitYearMax);
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture);
Console.WriteLine(DateTime.Parse("1/1/30"));
CultureInfo myCI = (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
Console.WriteLine(DateTime.Parse("1/1/30", myCI));
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.Calendar.ToFourDigitYear(30));
myCI.Calendar.TwoDigitYearMax = 2115;
Console.WriteLine(myCI.Calendar.ToFourDigitYear(30));
Console.WriteLine(DateTime.Parse("1/1/30", myCI));
Console.ReadLine();
}
}
}
My results:
2029
en-US
1/1/1930 12:00:00 AM
1/1/1930 12:00:00 AM
1930
2030
1/1/1930 12:00:00 AM