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