0

我需要使用 TryParse() 或 TryParseExact() 方法验证所有文化日期的用户输入。

DateTime.TryParse(args.Value, new CultureInfo("nl-NL", false), DateTimeStyles.None, out date)

此代码验证:

  • 01-10-2011
  • 2011 年 1 月 10 日
  • 2011 年 1 月 10 日 20:11
  • 2011 年 1 月 10 日 20:11

但我只需要它来验证:

  • 01-10-2011
  • 2011 年 1 月 10 日

连同指定文化中所有可能的日期格式:

  • 2011 年 1 月 10 日
    1. 2011 年 10 月

并且这些验证应该失败:

  • 2011 年 1 月 10 日 20:11
  • 2011 年 1 月 10 日 20:11

任何想法?

谢谢。

4

2 回答 2

0
DateTime.ParseExact(dateString, "d/MM/yyyy", DateTimeFormatInfo.InvariantInfo);

Where dateString is your date.

于 2013-04-19T16:17:40.740 回答
0

这可能会有所帮助,您可以将日期时间(带或不带时间)作为字符串提供,并用 try catch 将其包装以进行验证。

来自 MSDN - Convert.ToDateTime 方法(字符串,IFormatProvider)

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("{0,-18}{1,-12}{2}\n", "Date String", "Culture", "Result");

      string[] cultureNames = { "en-US", "ru-RU","ja-JP" };
      string[] dateStrings = { "01/02/09", "2009/02/03",  "01/2009/03", 
                               "01/02/2009", "21/02/09", "01/22/09",  
                               "01/02/23" };
      // Iterate each culture name in the array. 
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);

         // Parse each date using the designated culture. 
         foreach (string dateStr in dateStrings)
         {
            DateTime dateTimeValue;
            try {
               dateTimeValue = Convert.ToDateTime(dateStr, culture);
                // Display the date and time in a fixed format.
                Console.WriteLine("{0,-18}{1,-12}{2:yyyy-MMM-dd}",
                                  dateStr, cultureName, dateTimeValue);
            }
            catch (FormatException e) { 
                Console.WriteLine("{0,-18}{1,-12}{2}", 
                                  dateStr, cultureName, e.GetType().Name);
            }
         }
         Console.WriteLine();
      }
   }
}
于 2013-04-19T23:55:08.917 回答