我正在测试一段代码以查看规则是否每次都有效,所以我只创建了一个简短的控制台应用程序,它有一个字符串作为输入值,我可以随时替换它。
string titleID = "document for the period ended 31 March 2014";
// the other variation in the input will be "document for the period
// ended March 31 2014"
我正在做的是我从中获取一个特定的部分(取决于它是否包含一个特定的词 - nvm详细信息,有一致性所以我不担心这种情况)。之后我在特定位置之后接受其余的字符串,以便进行DateTime.ParseExact
最终我需要弄清楚如何检查第一个DateTime.ParseExact是否失败 然后使用不同的自定义格式执行第二次尝试。
这就是它的样子:
if(titleID.Contains("ended "))
{
// take the fragment of the input string after the word "ended"
TakeEndPeriod = titleID.Substring(titleID.LastIndexOf("ended "));
// get everything after the 6th char -> should be "31 March 2014"
GetEndPeriod = TakeEndPeriod.Substring(6);
format2 = "dd MMMM yyyy"; // custom date format which is mirroring
// the date from the input string
// parse the date in order to convert it to the required output format
try
{
DateTime ModEndPeriod = DateTime.ParseExact(GetEndPeriod, format2, System.Globalization.CultureInfo.InvariantCulture);
NewEndPeriod = ModEndPeriod.ToString("yyyy-MM-ddT00:00:00Z");
// required target output format of the date
// and it also needs to be a string
}
catch
{
}
}
// show output step by step
Console.WriteLine(TakeEndPeriod);
Console.ReadLine();
Console.WriteLine(GetEndPeriod);
Console.ReadLine();
Console.WriteLine(NewEndPeriod);
Console.ReadLine();
一切正常,直到我尝试不同的输入字符串,f.eg。 “截至2014年3月31日的期间文件”
所以在这种情况下,如果想解析“2014年3月31日”,我必须将自定义格式切换为 “MMMM dd yyyy”,我这样做并且它有效,但我无法弄清楚如何检查第一个解析是否失败以执行第二个解析。
首次解析 - >成功 - >更改格式和.ToString | - >检查是否失败,如果为true则使用不同的格式进行第二次解析 - >更改格式和.ToString
我试过
if (String.IsNullOrEmpty(NewEndPeriod))
{ do second parse }
或者
if (NewEndPeriod == null)
{ do second parse }
但是我在Console.WriteLine(NewEndPeriod)中得到一个空白的结果;
任何想法如何解决这个问题?
**编辑:**
在这里添加一个替代答案我使用Parse而不是TryParseExact,因为Parse将处理两种格式变化而无需指定它们
DateTime DT = DateTime.Parse(GetEndPeriod);
//The variable DT will now have the parsed date.
NewEndPeriod = DT.ToString("yyyy-MM-ddT00:00:00Z");
答案 0 :(得分:4)
但我无法弄清楚如何检查第一个解析是否按顺序失败 执行第二次
而不是DateTime.ParseExact
使用DateTime.TryParseExact
将返回bool
,指示解析是否成功。
DateTime ModEndPeriod;
if (!DateTime.TryParseExact(GetEndPeriod,
format,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out ModEndPeriod))
{
//parsing failed
}
您还可以使用多种格式进行解析,DateTime.TryParse overload采用一系列格式:
string[] formatArray = new [] { "dd MMMM yyyy","MMMM dd yyyy"};
DateTime ModEndPeriod;
if (!DateTime.TryParseExact(GetEndPeriod,
formatArray,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out ModEndPeriod))
{
//parsing failed
}