从字符串提取日期
我想从string.String提取日期和一些文本的组合,但日期格式更改为例如1. 12/2/2014 12:00:00 AM第一天2。星期一2014年九月12日第二天形成这两种格式我如何提取日期并将其转换为日期时间在C#中。从字符串提取日期
您可以使用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
strDate1就像strDate1 =“1/1/2015 12:00:00 AM asas”and strDate2 =“Mon 23 1 dec 2014 asasas”所以它不起作用 – 2014-12-09 12:41:21
@ GaneshGadekar:然后先去掉垃圾,'asas'不足以确定规则。 – 2014-12-09 12:42:48
是的,你是对的,但我有同样的问题日期附有描述。 – 2014-12-09 12:44:57
这两个字符串是什么?你可以用适当的格式显示它们吗? – 2014-12-09 12:31:01
阅读一些正则表达式。 – 2014-12-09 12:31:46
给出的例子是1和2是两个字符串我不能使用正则表达式格式更改运行时间 – 2014-12-09 12:35:38