C# 将字符串解析为日期时间格式;“日、月、日、年”;

C# 将字符串解析为日期时间格式;“日、月、日、年”;,c#,datetime,C#,Datetime,我需要将以下字符串解析为日期。 2016年9月23日星期五下午3点至8点 我在n-dash上拆分它,然后我需要使用格式字符串ParseExact。我试过以下方法。 “dddd”、“MMMM dd”、“yyyy” “dddd,MMMM dd,yyyy” “dddd MMMM dd yyyy” “日、月、日、年” 我意识到这是类似的,如果不是确切的长期日期,但我需要非本地。 这是我制作并尝试使用的函数 public DateTime parseDate(string s, string dateSt

我需要将以下字符串解析为日期。 2016年9月23日星期五下午3点至8点

我在n-dash上拆分它,然后我需要使用格式字符串
ParseExact
。我试过以下方法。 “dddd”、“MMMM dd”、“yyyy” “dddd,MMMM dd,yyyy” “dddd 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点,因为我在其他地方处理它,因为它是一个范围


在写答案时,提前感谢您(出于某种原因),评论中出现了所有内容,但这里有一个可以测试的工作版本:

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);

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

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);
你太接近了

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

dddd, MMM dd, yyyy

你离得太近了

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

dddd, MMM dd, yyyy

如果您跳过日期名称和时间值,删除逗号并解析剩下的日期,您会发现更容易。在您的示例中,这将是2016年9月23日。您可能会发现四个字母的月份缩写是一个问题,因为它不是中预期的缩写。替换为完整的月份名称可以解决这个问题。正如@stuartd所建议的,您无法分析日期的原因是因为您的字符串包含4个字符的月份缩写(
Sept
)。您必须提供3个字符的月份缩写。(请注意,
Sept
可能是某些地区的有效缩写。换句话说,如果您使用不同的
CultureInfo
,其中
Sept
是一个有效的缩写,那么您的代码可能会起作用)为什么不将答案作为答案发布?如果您跳过日期名称和时间值,您会发现更容易,删除逗号并解析剩下的日期。在您的示例中,这将是2016年9月23日。您可能会发现四个字母的月份缩写是一个问题,因为它不是中预期的缩写。替换为完整的月份名称可以解决这个问题。正如@stuartd所建议的,您无法分析日期的原因是因为您的字符串包含4个字符的月份缩写(
Sept
)。您必须提供3个字符的月份缩写。(请注意,
Sept
可能是某些地区的有效缩写。换句话说,如果您使用不同的
CultureInfo
,其中
Sept
是一个有效的缩写,您的代码可能会起作用)为什么不将答案作为答案发布?非常感谢,这非常有效。尽管我必须问为什么数组中有第13个元素。我甚至没有想到4个字符的缩写。不幸的是,我不能控制输入。有没有一种合适的方法可以同时包含3个字母和4个字母的缩写?或者我需要做两次单独的CultureInfo并尝试两次解析吗?很抱歉,如果这些问题不应该出现在这里。很抱歉,忽略13个元素的问题,因为我终于找到了正确的文档。非常感谢,这非常有效。尽管我必须问为什么数组中有第13个元素。我甚至没有想到4个字符的缩写。不幸的是,我不能控制输入。有没有一种合适的方法可以同时包含3个字母和4个字母的缩写?或者我需要做两次单独的CultureInfo并尝试两次解析吗?抱歉,如果这些问题不应该出现在这里。抱歉,忽略13个元素的问题,因为我终于找到了正确的文档。由于我使用的是4个字符的Sept缩写,因此仍然不起作用。抱歉,除非您能给我一个原因,让我将其作为答案,否则我不会更改它。另一个答案既包括这一点,也包括对4个字符缩写的修复。这涵盖了1米到多米的问题,这意味着代码仍然不起作用。由于我使用的是4个字符的Sept缩写,这仍然不起作用。抱歉,除非你能给我一个原因作为答案,否则我不会更改它。另一个答案既包括这一点,也包括对4个字符缩写的修复。这涵盖了1米到多米的问题,这意味着代码仍然无法工作。