以下片段的结果是“12/06/1930 12:00:00”。我如何控制隐含的世纪,使“12 Jun 30”变为 2030?
string dateString = "12 Jun 30"; //from user input
DateTime result;
DateTime.TryParse(dateString, new System.Globalization.CultureInfo("en-GB"),System.Globalization.DateTimeStyles.None,out result);
Console.WriteLine(result.ToString());
请暂时搁置一个正确解决方案是首先正确指定日期这一事实。
注意:结果与运行代码的 pc 的系统日期时间无关。
回答:谢谢 Deeksy
for (int i = 0; i <= 9; i++)
{
string dateString = "12 Jun " + ((int)i * 10).ToString();
Console.WriteLine("Parsing " + dateString);
DateTime result;
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-GB");
cultureInfo.Calendar.TwoDigitYearMax = 2099;
DateTime.TryParse(dateString, cultureInfo , System.Globalization.DateTimeStyles.None, out result);
Console.WriteLine(result.ToString());
}
最佳答案
这很棘手,因为使用 TryParse 的两位数年份的工作方式基于您正在使用的 CultureInfo 对象的 Calendar 属性的 TwoDigitYearMax 属性。 (CultureInfo->Calendar->TwoDigitYearMax)
为了使两位数字的年份前面加上 20,您需要手动创建一个 CultureInfo 对象,该对象具有一个 Calendar 对象,其中 2099 设置为 TwoDigitYearMax 属性。不幸的是,这意味着解析的任何两位数日期都将有 20 个前缀(包括 98、99 等),这可能不是您想要的。
我怀疑您最好的选择是使用第 3 方日期解析库,而不是使用 +50/-50 年规则表示 2 位数年份的标准 tryparse。 (一位 2 位数的年份应转换为今年之前 50 年和今年之后 50 年之间的范围)。
或者,您可以覆盖日历对象(它是虚拟的)上的 ToFourDigitYear 方法并使用它来实现 -50/+50 规则。
关于c# - DateTime.TryParse世纪控件C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206485/