字符串无法识别为有效日期时间

时间:2017-06-07 06:21:44

标签: c# datetime

说明

在我的应用程序中,允许用户以字符串格式EX-" 01/01 / 2000"插入日期,并且我使用DateTime.Parse("01/01/00");解析此字符串值它工作正常。但在少数情况下,它正在破裂。

案例1:

输入:" 01/01/00"

代码:DateTime.Parse(" 01/01/00");

输出:01/01/2000

案例2:

输入:" 01/01 / 000"

代码:DateTime.Parse(" 01/01 / 000");

输出:获取错误"字符串未被识别为有效日期时间。"

案例3:

输入:" 01/01/0000"

代码:DateTime.Parse(" 01/01 / 0000");

输出:获取错误"字符串未被识别为有效日期时间。"

如何将000或0000分析为正确的年份?

4 个答案:

答案 0 :(得分:0)

查看Noda Time库。它支持各种地理区域中的大范围日期以及它们之间的转换。见http://nodatime.org

答案 1 :(得分:0)

您可以使用以下扩展方法

进行转换
public static DateTime GetDateTime(this string strdate)
{
    int day = Convert.ToInt32(strdate.Split('/')[0]);
    int month = Convert.ToInt32(strdate.Split('/')[1]);
    int year = Convert.ToInt32(strdate.Split('/')[2]);

    if (year == 0)
        year = 2000;

    return new DateTime(year, month, day);
}

答案 2 :(得分:0)

如果您检查输入,则输入input =" 01/01/000 "它增加了一个零,并使值=" 01/01/0000 "这不存在因此抛出异常。尝试 输入="的 01/01/100 "并且您将获得输出" 01/01/0100 " 范围限制为最后两位数,如果您键入( 00到29 )范围内的任何数字,您将获得2000+的日期,即输入=(" 01/01 / 29 ")你得到输出=(" 01/01/2029 ")但如果输入input =(" 01/01/30" )你会得到输出=(" 01/01/1930 ")

答案 3 :(得分:0)

当您验证日期时,您应该记住有效和无效的日期格式应如下所示:

有效日期:" 02/02 / 0002"," 02/02/02"
无效日期:" 02/02 / 002"," 02/02 / 00002"

请找到以下代码供您参考。我认为这是不言自明的。

using System;
using System.Globalization;

class Program
{
    static void Main(string[] args)
    {
        //Valid Dates: "02/02/0002", "02/02/02"        
        //Invalid Dates: "02/02/002", "02/02/00002"        
        string date = "02/02/02";
        bool validDate = isDateTimeFormatValid(date);
        string status = validDate ? "valid" : "invalid";
        Console.WriteLine(date + " is " + status + " date");
        Console.ReadLine();
    }
    private static bool isDateTimeFormatValid(string date)
    {
        DateTime dateResult;
        bool chkYY = false;
        bool chkYYYY = false;
        if (date.Contains("/"))
        {
            chkYY = DateTime.TryParseExact(date, "MM/dd/yy", CultureInfo.InvariantCulture,
                             DateTimeStyles.None, out dateResult);
            chkYYYY = DateTime.TryParseExact(date, "MM/dd/yyyy", CultureInfo.InvariantCulture,
                             DateTimeStyles.None, out dateResult);
        }
        //Performing OR Operation
        bool result = chkYY | chkYYYY;
        return result;
    }
}