我想从string.String提取日期是日期和一些文本的组合,但日期格式的变化,例如1.12/ 2 / 2014 12 :00:00AM第一天2。星期一12-9月,2014年第二天这两种格式,我可以提取日期,并将其转换为日期时间在c#中。
发布于 2014-12-09 20:36:51
您可以将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-query,它使用格式字符串的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 successfullyhttps://stackoverflow.com/questions/27379005
复制相似问题