Проверка формата даты из строки в С#

Я хочу проверить, содержит ли string даты, такие как 1/01/2000 и 10/01/2000 в формате dd/MM/yyyy.

До сих пор я попробовал это.

DateTime dDate = DateTime.Parse(inputString);
string.Format("{0:d/MM/yyyy}", dDate); 

Но как я могу проверить, корректен ли этот формат для throw an exception?

Ответ 1

string inputString = "2000-02-02";
DateTime dDate;

if (DateTime.TryParse(inputString, out dDate))
{
    String.Format("{0:d/MM/yyyy}", dDate); 
}
else
{
    Console.WriteLine("Invalid"); // <-- Control flow goes here
}

Ответ 2

вы можете использовать DateTime.ParseExact со строкой формата

DateTime dt = DateTime.ParseExact(inputString, formatString, System.Globalization.CultureInfo.InvariantCulture);

Выше будет генерировать исключение, если данная строка не в указанном формате.

используйте DateTime.TryParseExact, если вам не нужно исключение в случае неправильного формата, но вы можете проверить возвращаемое значение этого метода, чтобы определить, имеет ли значение синтаксического анализа успех или нет.

проверить Пользовательские строки формата даты и времени

Ответ 3

Я думаю, что одним из решений является использование DateTime.ParseExact или DateTime.TryParseExact

DateTime.ParseExact(dateString, format, provider);

источник: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

Ответ 4

https://msdn.microsoft.com/es-es/library/h9b85w22(v=vs.110).aspx

string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                     "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                     "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                     "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                     "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};
  string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", 
                          "5/1/2009 6:32:00", "05/01/2009 06:32", 
                          "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00"}; 
  DateTime dateValue;

  foreach (string dateString in dateStrings)
  {
     if (DateTime.TryParseExact(dateString, formats, 
                                new CultureInfo("en-US"), 
                                DateTimeStyles.None, 
                                out dateValue))
        Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
     else
        Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
  }

Ответ 5

Вы можете использовать ниже IsValidDate():

 public static bool IsValidDate(string value, string[] dateFormats)
    {
        DateTime tempDate;
        bool validDate = DateTime.TryParseExact(value, dateFormats, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, ref tempDate);
        if (validDate)
            return true;
        else
            return false;
    }

И вы можете передать в формате значения и даты. Например:

var data = "02-08-2019";
var dateFormats = {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}

if (IsValidDate(data, dateFormats))
{
    //Do something
}
else
{
    //Do something else
}

Ответ 6

Попробуйте это

DateTime dDate;
dDate = DateTime.TryParse(inputString);
String.Format("{0:d/MM/yyyy}", dDate); 

см. эту ссылку для получения дополнительной информации. http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

Ответ 7

вы всегда можете попробовать:

Regex r = new Regex(@"\d{2}/\d{2}/\d{4}");

r.isMatch(inputString);

это проверит, что строка находится в формате "02/02/2002", вам может понадобиться немного больше, если вы хотите убедиться, что это действительная дата, например, dd/mm/yyyy

Ответ 8

Используйте массив правильных форматов дат, проверьте docs:

string[] formats = { "d/MM/yyyy", "dd/MM/yyyy" };
DateTime parsedDate;
var isValidFormat= DateTime.TryParseExact(inputString, formats, new CultureInfo("en-US"), DateTimeStyles.None, out parsedDate);

if(isValidFormat)
{
    string.Format("{0:d/MM/yyyy}", parsedDate);
}
else
{
    // maybe throw an Exception
}

Ответ 9

Datetime dt = datetime.parse(строка); string out = dt.tostring( "dd/MM/yyyy" );