检查日期时间是否有效的方法

时间:2015-07-30 20:44:29

标签: c# datetime

我搜索了SO,但无法找到对我有用的回复。

我在c#中有一个dateTime值,我想检查它是否有一个有效值。例如,如果将以下值传递给datetimeupdate(类型为datetime),我应该能够抛出一个异常。 / p>

datetimeupdate=  2015-07-29T19:55:10.994sdfsdf

我尝试使用Tryparse,但它接受字符串作为第一个参数。但datetimeupdate参数的类型为datetime。我不知道如何检查参数是否有效值。

我无法进行前端验证,因为这是在WebAPI中,这就是我得到的值(使用无效字符)

3 个答案:

答案 0 :(得分:1)

你有一个日期时间的字符串表示。您可以使用下面的TryParse()方法;如果解析成功,它将返回TRUE

    static void Main(string[] args)
    {
        string str = "2015-07-29T19:55:10.994sdfsdf";
        Console.WriteLine(IsvalidDateTime(str));

    }

    static bool IsvalidDateTime(string date)
    {
        DateTime dt;
        return DateTime.TryParse(date, out dt);
    }

答案 1 :(得分:0)

using System;

public class Program
{
    public static void Main()
    {
        try
        {
        string d = "2015-07-29T19:55:10.994sdfsdf";
        DateTime dt = Convert.ToDateTime(d);

        Console.WriteLine(dt);
        }
        catch(FormatException)
        {
            Console.WriteLine(" Date is InValid ");
        }
    }
}

答案 2 :(得分:0)

DateTime在不同国家/地区之间进行了非常广泛的格式化。 例如,在瑞典,我们遵循ISO 8601 - 格式 - yyyy-MM-dd。在美国,标准格式为M/d yyyy

关于日期的“有效性”;很难说 有人可能会将日期描述为2015-07-29T19:55:10.994sdfsdf。 如果您的程序可以处理(并解析)该输入,那么它可能是有效的。

解决您问题的最简单方法是使用DateTime.ParseDateTime.TryParseExact(如果您知道日期的格式)

string dateString = "2015-07-30 18:00:00.142"
string dateFormat = "yyyy-MM-dd HH:mm:ss.fff"


DateTime parsedDate;

bool parseSuccess = DateTime.TryParseExact(
    s: dateString, 
    format: dateFormat, 
    provider: CultureInfo.CurrentCulture, 
    style: DateTimeStyles.None, 
    result: out parsedDate
);

if (parseSuccess)
{
    // valid
}
else 
{
    // not valid
}

如果DateTime的字符串表示格式未知,您可以使用DateTime.ParseDateTime.TryParse

string dateString = "2015-07-30 18:00:00.142"
DateTime parsedDate;

if (DateTime.TryParse(dateString, out parsedDate))
{
    // valid
}
else 
{
    // not valid
}

然而,即使使用相当广泛 - 这些也无法保证解析“正确”日期,因为最终用户可能以不同于预期的格式输入日期。而你最终可能会花费几个月的时间;这可能会产生一些意想不到的后果。

有些阅读