将字符串解析为DateTime格式"日,月dat,年"

时间:2016-02-15 23:24:48

标签: c# datetime

我有以下字符串,我需要解析为日期。 2016年9月23日星期五 - 下午3点 - 晚上8点

我将它拆分为n-dash,然后我需要将ParseExact与格式字符串一起使用。我尝试了以下内容。 " DDDD',' MMMM dd',' YYYY" " dddd,MMMM dd,yyyy" " dddd MMMM dd yyyy" " ddd,MMMM dd,yyyy"

我意识到这是相似的,如果不是确切到长期,但我需要非本地。 这是我制作的功能,我正在尝试使用它。

public DateTime parseDate(string s, string dateString)
{
    var splitAr = s.Split((char)8211);
    var dPart = new DateTime();
    try
    {
        dPart = DateTime.ParseExact(splitAr[0].Trim(), dateString, CultureInfo.InvariantCulture);
    }
    catch (Exception e)
    {
        Trace.TraceWarning("Wasn't able to parse this date string so used try." + splitAr[0]);
        DateTime.TryParse(splitAr[0].Trim(), out dPart);
    }
    var timeArray = splitAr[1].Split('-');

    return d;
}

如果有人能看到这个问题,我会从我抓过的网页中拉出字符串。

我试图将其简化为简单。我这样称呼它。

var result = objToTest.parseDate("Friday, Sept 23, 2016 – 3pm - 8pm", "dddd, MMMM dd, yyyy");

我只需要实际的日期而不是下午3点到晚上8点,因为我在其他地方处理它,因为它是一个范围。

提前致谢

2 个答案:

答案 0 :(得分:2)

你太近了!

问题出在几个月:MMMM用于拼写整月的名称(September而不是Sept)。缩写的月份名称(例如Sept)使用MMM只有3个M'

dddd, MMM dd, yyyy

Reference

答案 1 :(得分:1)

在撰写答案时,所有内容都出现在评论中(出于某种原因),但这是一个可以测试的工作版本:

var str = "Friday, Sept 23, 2016 – 3pm - 8pm";

var cultureInfo = new CultureInfo("en-US");
cultureInfo.DateTimeFormat.AbbreviatedMonthNames = new[] 
    { "Jan", "Feb", "Mar",
      "Apr", "May", "Jun",
      "Jul", "Aug", "Sept",
      "Oct", "Nov", "Dec", "" };

var result = DateTime.ParseExact(str.Split('–').First().Trim(), "dddd, MMM dd, yyyy", cultureInfo);