我被困在从句子或格式中提取日期时间。
Posted on Thursday, May 1st, 2014 at 10:07 AM
2014-06-20T02:11:06+00:00
C#中是否有任何好的正则表达式或工具,我可以从这些格式中找出日期时间。
答案 0 :(得分:1)
我建议你拆分字符串并提取所需的部分。
下面的解决方案仅在字符串形式为时才有效
Posted on Thursday, May 1st, 2014 at 10:07 AM
试试这个:
string datestring = "Posted on Thursday, May 1st, 2014 at 10:07 AM";
var dateParts = datestring.Split();
var day=dateParts[2].Replace(",","");
var month=dateParts[3];
var date=dateParts[4].Replace("st","").Replace("nd","").Replace("rd","")
.Replace("th","").Replace(",","");
var year=dateParts[5];
var hoursminutes=dateParts[7];
var AMorPM=dateParts[8];
//format d-MMMM-yyyy h:mm tt
string editedDate=date+"-"+month+"-"+year+" "+hoursminutes+" "+AMorPM;
DateTime finalDate = DateTime.ParseExact(editedDate, "d-MMMM-yyyy h:mm tt",
CultureInfo.InvariantCulture);
答案 1 :(得分:1)
这是一种只需使用DateTime.ParseExact()的方法:
string ds = "Posted on Thursday, May 1st, 2014 at 10:07 AM";
string[] formats = new string[] {
"MMMM d'st, 'yyyy' at 'hh:mm tt", // for parsing like "1st"
"MMMM d'nd, 'yyyy' at 'hh:mm tt", // for parsing like "2nd"
"MMMM d'rd, 'yyyy' at 'hh:mm tt", // for parsing like "3rd"
"MMMM d'th, 'yyyy' at 'hh:mm tt", // for parsing like "4th"
};
// Get rid of the "Posted on Thursday"
ds = ds.Substring(ds.IndexOf(", ") + 2);
DateTime date = DateTime.ParseExact(ds, formats, null, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
// Once you have a DateTime, you can format it any way you want
Console.WriteLine(date.ToString("o"));
答案 2 :(得分:1)
您可以制作自定义功能,并使用Custom Date and Time Format Strings使用DateTime.TryParseExact解析日期。
public DateTime ParseDateTime(string dt)
{
DateTime d;
if (DateTime.TryParseExact(dt, "'Posted on' dddd, MMM d'st', yyyy 'at' hh:mm tt" , null, System.Globalization.DateTimeStyles.None, out d))
return d;
if (DateTime.TryParseExact(dt, "'Posted on' dddd, MMM d'nd', yyyy 'at' hh:mm tt", null, System.Globalization.DateTimeStyles.None, out d))
return d;
if (DateTime.TryParseExact(dt, "'Posted on' dddd, MMM d'rt', yyyy 'at' hh:mm tt", null, System.Globalization.DateTimeStyles.None, out d))
return d;
if (DateTime.TryParseExact(dt, "'Posted on' dddd, MMM d'th', yyyy 'at' hh:mm tt", null, System.Globalization.DateTimeStyles.None, out d))
return d;
throw new InvalidOperationException("Not a valid DateTime string");
}
在日期时间字符串中,有一些事情需要解释。
一个文字张贴,可以用单引号括起来解析。
1st,使用d'st'进行解析,这将适用于第2,第3,第4等等。