从字符串中提取日期

时间:2014-12-09 12:30:07

标签: c#

我想从string.String中提取日期是日期和附加的一些文本的组合,但日期格式更改为例如1. 12/2/2014 12:00:00 AM第一天2. 2014年9月12日第二天形成这两种格式我如何在c#中提取日期并将其转换为日期时间。

1 个答案:

答案 0 :(得分:3)

您可以使用ParseExact / TryParseExact一系列允许的格式:

string strDate1 = "12/2/2014 12:00:00 AM";
string strDate2 = "Mon 12 Sep 2014";  // it was a friday ;)
string[] allowedFormats = { "dd/M/yyyy hh:mm:ss tt", "ddd dd MMM yyyy" };
DateTime dt;
if (DateTime.TryParseExact(strDate1, allowedFormats, System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None, out dt))
{
    Console.WriteLine("strDate1 parsed successfully: " + dt); 
}
if (DateTime.TryParseExact(strDate2, allowedFormats, System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None, out dt))
{
    Console.WriteLine("strDate2 parsed successfully: " + dt);
}

然而,2014年9月12日星期一无法解析,因为它不是星期一而是星期五。

如果字符串还包含"垃圾"你需要先删除它。您可以使用以下LINQ查询,它使用格式字符串' Length获取字符串的相关部分:

string[] dateStrings = { "12/2/2014 12:00:00 AM garbage garbage", "Fri 12 Sep 2014garbage" };
string[] allowedFormats = { "dd/M/yyyy hh:mm:ss tt", "ddd dd MMM yyyy" };
DateTime dt = default(DateTime);
var dates = from dateString in dateStrings
            from format in allowedFormats
            where format.Length <= dateString.Length
            let datePart = dateString.Substring(0, format.Length)
            where DateTime.TryParseExact(datePart, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt)
            select dt;
DateTime[] validDates = dates.ToArray();  // both dates parsed successfully