c# second DateTime.ParseExact检查第一个是否失败

本文关键字:第一个 是否 失败 检查 ParseExact second DateTime | 更新日期: 2023-09-27 18:10:10

我正在测试一段代码,看看规则是否每次都有效,所以我只做了一个简短的控制台应用程序,其中有1个字符串作为输入值,我可以随时替换。

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

一切工作正常,直到我尝试不同的输入字符串,例如。"截至2014年3月31日止期间的文件"

所以在这种情况下,如果想解析"March 31 2014",我必须将我的自定义格式切换为" mmm dd yyyy",我这样做,它的工作,但我不知道如何检查如果第一次解析失败,以执行第二个。

第一次解析->成功->更改格式和.ToString|->检查是否失败,如果为真,使用不同的格式进行第二次解析->更改格式和.ToString

I've try

if (String.IsNullOrEmpty(NewEndPeriod))
{ do second parse }

if (NewEndPeriod == null)
{ do second parse }

但是我得到一个空白的结果在Console.WriteLine(NewEndPeriod);

有什么办法吗?

** EDIT: **

在这里添加一个替代答案,我得到的是使用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"); 

c# second DateTime.ParseExact检查第一个是否失败

但是我不知道如何检查第一次解析是否按顺序失败执行第二个

DateTime.TryParseExact代替DateTime.ParseExact,它将返回一个bool,表明解析是否成功。

DateTime ModEndPeriod;
if (!DateTime.TryParseExact(GetEndPeriod, 
                            format, 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None, 
                            out ModEndPeriod))
{
    //parsing failed
}

您还可以使用多种格式来使用DateTime进行解析。TryParse重载,它接受一个格式数组:

string[] formatArray = new [] { "dd MMMM yyyy","MMMM dd yyyy"};
DateTime ModEndPeriod;
if (!DateTime.TryParseExact(GetEndPeriod, 
                            formatArray, 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None, 
                            out ModEndPeriod))
{
    //parsing failed
}