从c#中的句子中提取日期时间

时间:2014-06-20 07:22:17

标签: c# datetime

我被困在从句子或格式中提取日期时间。

Posted on Thursday, May 1st, 2014 at 10:07 AM

2014-06-20T02:11:06+00:00

C#中是否有任何好的正则表达式或工具,我可以从这些格式中找出日期时间。

3 个答案:

答案 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");
}

在日期时间字符串中,有一些事情需要解释。

  1. 一个文字张贴,可以用单引号括起来解析。

  2. 1st,使用d'st'进行解析,这将适用于第2,第3,第4等等。