从c#语句中提取日期时间

本文关键字:取日期 时间 提取 语句 | 更新日期: 2023-09-27 18:09:33

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

Posted on Thursday, May 1st, 2014 at 10:07 AM
2014-06-20T02:11:06+00:00

在c#中是否有好的正则表达式或工具,我可以从这些格式中找到日期时间

从c#语句中提取日期时间

使用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"));

我建议您拆分字符串并提取所需的部分。

仅在字符串为的形式时有效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);

您可以创建一个自定义函数并使用自定义日期和时间格式字符串来使用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");
}

在你的datetime字符串中有几件事需要解释。

  1. 一个可以用单引号括起来解析的文本。

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