从C#中的字符串中获取多种可能格式的日期

时间:2016-09-07 07:47:15

标签: c# string date parsing

我是C#的新手。

我必须构建一个读取字符串并尝试将其转换为日期的脚本。

问题是:

- 日期有不同的格式。 (国际,美国,日本)

- 日期有不同的分隔符,或根本没有。

- 年份可能完成或只有2个职位

我已经开始更换可能的分隔符:

dateinstring = dateinstring.Replace("-","");
dateinstring  = dateinstring.Replace(".","");
dateinstring = dateinstring.Replace("/","");

然后检查长度以查看年份是否完整(例如31102012或311012)

if(dateinstring.lenght = 8){
//check format with complete date
}else{
//check format with reduced year
}

现在我偶然发现了这个函数:DateTime.TryParseExact似乎做了同样的事情,但它返回一个布尔值(true或false)而不是日期本身。

我错过了什么吗? C#中有哪些方法可以执行此操作,还是应该继续使用我的解决方案?

1 个答案:

答案 0 :(得分:1)

这是我在项目中使用的函数,当内置解析失败时 - 所以它只涵盖其他格式,而不是标准格式。

private DateTime? TryParseNumberString(string dateText)
{
    // additional date format options to be accepted
    var extraDateFormats = new[]
    {
        "d.M.",
        "d.M",
        "ddMMyyyy",
        "ddMMyy",
        "ddM"
    };
    foreach (var item in extraDateFormats)
    {
        DateTime test;
        if (DateTime.TryParseExact(dateText, item, null, System.Globalization.DateTimeStyles.AssumeLocal, out test))
        {
            return test;
        }
    }
    return null;
}

方法基本上是,我想到了一些我想支持的额外日期表示和评估顺序,以便根据我的意愿评估模糊字符串。

根据您的要求,您可以更改格式字符串数组,也可以添加特定的文化,以防您希望支持带有书面日/月的长日期格式。

您还可以尝试DateTime.TryParse(input, culture, DateTimeStyles.None, out result)使用不同的culture值,以便按惯例尝试解析英语,日语和其他语言。