在C#中解析“27.92016”日期(d.Myyyy格式)(.NET标准库)

时间:2016-10-06 10:26:01

标签: c# .net parsing datetime

我正在尝试使用.NET标准函数(DateTime.Parse / TryParse)解析以下日期: 7.92016 ,代表2016年9月7日。

所以我做了以下(没有成功,因为它引发了无效格式异常):

DateTime date;
DateTime.TryParseExact("7.92016", "d.Myyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date);

让我感到困扰的是,完全有可能确定月份在哪里结束,因为年份是用“yyyy”指定的。所以标准库应该能够管理它。

当然我可以手动拆分字符串,但有没有更清晰的解决方案来管理这种情况?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:6)

由于M接受从112(一位或两位数)的值,因此它是"贪婪的" (这样它会尝试接受尽可能多的数字),92部分会关闭TryParseExact

例如,交换月份和年份,效果很好:

var sept7of2016 = 
    DateTime.ParseExact("7.20169", "d.yyyyM", 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None);

换句话说,使用标准DateTime方法无法完成任务。

答案 1 :(得分:1)

不确定是否有其他选项而不是手动拆分。 如果你想要它更干净,你可以写一个函数来转换它:

public static DateTime convertDate(string date)
    {
        int pos = date.IndexOf('.');
        return Convert.ToDateTime(date.Substring(0, pos) + "/" +
            date.Substring(pos + 1, (date.Length - 5 - pos)) + "/" +
            date.Substring(date.Length - 4));
    }