0

再会,

通常,如果我想测试一个字符串是否是有效的日期时间格式,我会使用:

if (DateTime.TryParseExact()){
//do something
}

请问有没有代码可以直接测试Convert.ToDateTime() 是否成功?例如像:

if (Convert.ToDateTime(date1)){
//do something
}

或者

if(Convert.ToDateTime(date1) == true){
//do soemthing
}

我的想法是让它成为 bool 来测试它是否成功转换为日期时间。只是试图找出代码而不是使用 DateTime.TryParseExact()

4

4 回答 4

4

你的第一个代码

if (DateTime.TryParseExact()) {
    //do something
}

做你想要的。

像这样使用它:

if (DateTime.TryParseExact(str, ...)) {    // OR use DateTime.TryParse()
    // str is a valid DateTime
}
else {
    // str is not valid
}

DateTime.TryParse()如果您不想提供格式,可以使用。
两种方法都返回一个boolean 值。

于 2013-07-10T08:14:42.537 回答
2

如果你真的想要,你可以使用转换为。但是,使用这意味着您无法获得 tryparse 可以为您提供的功能。

尝试解析:

- 简单的 if/else 验证

- 如果将不良数据放入其中,不会崩溃并烧毁您的应用程序

public static bool
{ 
    TryParse(string s, out DateTime result)
}

然后 if else 验证

转换成:

-如果输入了不良数据,您的应用程序将崩溃

- 最好在其中包含一个 try catch

- 参见关于 ConvertTo的msdn 文章

 private static void ConvertToDateTime(string value)
 {
  DateTime convertedDate;
  try {
     convertedDate = Convert.ToDateTime(value);
     Console.WriteLine("'{0}' converts to {1} {2} time.", 
                       value, convertedDate, 
                       convertedDate.Kind.ToString());
  }
  catch (FormatException) {
     Console.WriteLine("'{0}' is not in the proper format.", value);
  }
}

在我看来,您应该始终偏爱 Tryparse。

于 2013-07-10T08:24:25.520 回答
0

根据您的评论:

我需要声明一种格式来检查,有时日期时间格式可能不同,这就是为什么我在想有没有像我想的那样的代码。

TryParseExact已经采用了格式。

这个简短的示例使用TryParseExact完成您想要的操作。TryParseExact如果格式或日期错误,不会抛出异常,因此您不必担心昂贵的Try/Catch块。相反,它会返回false

static void Main()
{
    Console.Write(ValidateDate("ddd dd MMM h:mm tt yyyy", "Wed 10 Jul 9:30 AM 2013"));
    Console.Read();
}

public static bool ValidateDate(string date, string format)
{
   DateTime dateTime;
   if (DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
   {
       Console.WriteLine(dateTime);
       return true;
   }
   else
   {
       Console.WriteLine("Invalid date or format");
       return false;
   }
}

或缩短:

public static bool ValidateDate(string date, string format)
{
    DateTime dateTime;
    return DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);
}
于 2013-07-10T08:20:14.740 回答
-1

然后使用类似的东西。

bool isDateTimeValid(string date, string format)
{
    try
    {
        DateTime outDate = DateTime.ParseExact(date, format, Thread.CurrentThread.CurrentUICulture);

        return true;
    }
    catch(Exception exc)
    {
        return false;
    }
}
于 2013-07-10T08:21:24.267 回答