在本例中,我有以下拍卖实例的下拉列表,但没有命名它们的标准:<select name="marketId" onchange="javascript:reload()"><option value="27" selected="selected">Jul08Auc</option>
<option value="61">Sep08Auc</option>
<option value="623">Dec10Auc</option>
<option value="743">Apr11Auc</option>
<option value="66">Oct08Auc</option>
<option value="81">Nov08Auc</option>
<option value="287">October 2009</option>
<option value="703">Mar11Auc</option>
<option value="222">Jun09Auc</option>
<option value="383">Mar10Auc</option>
<option value="423">Apr10Auc</option>
<option value="523">August 2010</option>
<option value="21">Jun08Auc</option>
<option value="105">Jan09Auc</option>
<option value="142">March 2009</option>
<option value="202">May 2009</option>
<option value="303">November 2009</option>
<option value="449">May10Auc</option>
<option value="463">June 2010</option>
<option value="503">July 2010</option>
<option value="663">Jan11Auc</option>
<option value="763">May11Auc</option>
<option value="122">Feb09Auc</option>
<option value="282">September 2009</option>
<option value="41">Aug08Auc</option>
<option value="543">September 2010</option>
<option value="603">Nov10Auc</option>
<option value="247">July 2009</option>
<option value="346">Jan10Auc</option>
<option value="363">Feb10</option>
<option value="683">Feb11Auc</option>
<option value="583">Oct10Auc</option>
<option value="101">Dec08Auc</option>
<option value="182">April 2009</option>
<option value="262">August 2009</option>
<option value="323">December 2009</option></select>
现在我的问题是,我将在一个post表单中获得其中一个选项,我需要将其中列出的Month和Year更改为一个不错的DateTime对象。
其中一些是链接"Oct10Auc",还有一些类似于"2009年12月",这意味着无法控制日期格式。
我想做的是拿"Oct10Auc",让代码看看它,然后说,哦,是的,你想要2010年10月1日的日期,或者拿2009年9月说"你想要2009年9日的日期"。
我的目标是不必编写一个巨大的字符串解析器,试图找出它正在查看的戳的时间,然后对其进行解码
我想知道C#或任何可用的API是否可以处理这个问题?
我会建立一个格式列表,然后在.上为每个格式调用DateTime.TryParseExact
static DateTime Parse(string dateString)
{
string[] formats = new [] {"MMMYYAuc", "MMMM YYYY"};
DateTime parsedDate = new DateTime();
foreach (string fmt in formats)
{
if (DateTime.TryParseExact (dateString, fmt, null, DateTimeStyles.Default, out parsedDate)
return parsedDate;
}
throw new FormatException ();
}
以下是格式选项的完整列表。您可以嵌入转义字符(就像AUC一样)。
在C#中测试它足够简单。启动一个快速控制台应用程序,将日期值传递给它,看看DateTime.TryParse()是否适用于它们。你想事先做的一件事是用字符串将"Auc"替换为"。
但实际上,日期似乎只有两种模式:月-年MonYrAuc
DateTime.TryParse()对于Month-Year应该可以。对于MonYr,你只需要在Mon和Yr之间留出一个空格,然后在Yr前面加一个"20",假设它只是2000年代。
您可以使用DateTime.ParseExact
函数。只需创建有效的format
参数,使用InvariantCulture
作为IFormatProvider并将字符串传递给函数。
由于有两种格式,您可以捕获FormatException
异常,并可以尝试用另一种格式解析日期。