c# - DateTime.TryParse世纪控件C#

标签 c# datetime tryparse

以下片段的结果是“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/

相关文章:

c# - 升级到 VS 2012 后 PInvoke 停止工作

c# - 如何在 MassTransit 中配置多个消息消费者?

c# - 如何在整行的子字符串上 float.TryParse ?

c# - 从文件名获取日期时间

c# - 如何实现双向多对多关系的关联类?

c# - 与 Microsoft Enterprise Library 共享 MySQL 连接

algorithm - 计算日期时间轴最小、最大和主要次要刻度间隔

mysql - 数据库模式,默认值为 NOW()

python - 如何确定 python 中当前和上周的开始日期?

c# - Enum.TryParse 对任何数值返回 true