2016-02-15 184 views
0

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

我在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点,因为我已经在其他地方处理它,因为它是一个范围。提前

+0

如果你跳过国庆节的名称以及时间值,去掉逗号和解析什么是离开的日期,你会发现它更容易。在你的例子中将是'2016年9月23日'。您可能会发现四个字母的月份缩写是一个问题,因为它不是[DateTimeFormatInfo.AbbreviatedMonthNames](https://msdn.microsoft.com/zh-cn/library/system.globalization.datetimeformatinfo中的预期缩写。 AbbreviatedMonthNames中(v = vs.110)的.aspx)。用整个月份名称代替将解决此问题。 – stuartd

+0

正如@stuartd所建议的那样,你不能解析日期的原因是因为你的字符串包含一个4个字符的月份缩写('Sept')。您必须提供3个字符的月份缩写。 (注意''Sept''应该是某些语言环境的有效缩写,换句话说,如果你使用不同的'CultureInfo',你的代码_may_可以工作,其中'Sept'是一个有效的缩写] – Serge

+0

你为什么不发表回答作为答案? –

回答

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

非常感谢你的完美工作。虽然我不得不问为什么阵列中有第13个元素。我甚至没有想到4个字符的缩写。不幸的是,我不控制输入。有没有一种体面的方式可能包含3个和4个字母缩写?或者我必须做2个独立的cultureInfos,并在解析中做2次尝试?对不起,如果这些问题不应该在这里。 –

+0

抱歉,我终于找到正确的文档,忽略了13个元素的问题。 –

2

你是如此接近!

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

dddd, MMM dd, yyyy 

Reference

+0

由于我使用的4个字符的Sept缩写,这仍然不起作用。 –

+0

这应该被标记为答案 – Gabe

+0

对不起,但除非你能给我一个这个答案的理由我不会改变它。另一个答案涵盖了这一点,并且还修正了4个字符的缩写。这涵盖了1M到多个问题,这意味着代码仍然无法工作。 –

相关问题