检查datetime是否有效的方法

本文关键字:方法 有效 是否 datetime 检查 | 更新日期: 2023-09-27 18:05:33

我在SO中搜索,但未能找到适合我的响应。

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

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

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

我不能做前端验证,因为这是在WebAPI中,这是我得到的值(无效字符)

检查datetime是否有效的方法

你有一个日期时间的字符串表示。您可以像下面这样使用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);
    }
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 ");
        }
    }
}

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
}

然而,尽管使用非常广泛—这并不能保证解析出"正确"的日期,因为最终用户可能以不同于预期的格式输入了日期。最后你可能会用小时来代替月;这可能会产生一些意想不到的后果。

一些阅读

  • 自定义DateTime-formats。
  • DateTime。TryParse
  • DateTime。TryParseExact