Как проверить формат DateTime?

Я предполагаю, что пользователь должен ввести формат DateTime, но мне нужно проверить его, чтобы проверить, допустимо ли это. Пользователь может ввести "yyyy-MM-dd", и все будет хорошо, но они также могут ввести "MM/yyyyMM/ddd" или любую другую комбинацию. Есть ли способ проверить это?

Ответы

Ответ 1

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

Ответ 2

Вы ищете что-то вроде этого?

DateTime expectedDate;
if (!DateTime.TryParse("07/27/2012", out expectedDate))
{
    Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!");
}

Если ваш пользователь знает точный формат (ы), который требуется...

string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" };
DateTime expectedDate;
if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), 
                            DateTimeStyles.None, out expectedDate))
{
    Console.Write("Thank you Mario, but the DateTime is in another format.");
}

Ответ 3

Я предполагаю, что вы хотите знать, действительно ли указанная строка формата...

Для этого вы можете округлить его:

    private bool IsValidDateFormat(string dateFormat)
    {
        try
        {
            String dts=DateTime.Now.ToString(dateFormat);
            DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture);
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

Ответ 4

Если я неправильно помню, единственные недопустимые строки формата DateTime имеют один символ. Вы можете предположить, что допустима любая строка формата даты и времени символа 2 или более.

DateTime.ParseExact("qq", "qq", null) == DateTime.Today
DateTime.ParseExact("myy", "501", null) == "05/01/2001"

Стандартный (1 символ)
Пользовательский ( > 1 символ)

Для справки допускаются одиночные символьные строки в виде форматов:

d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y

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

Ответ 5

Вы не говорите о своей стратегии проверки. В любом случае вы должны использовать что-то, что связано с регулярными выражениями, а не применять разрешенные шаблоны. Это поможет избежать формальной достоверности. Затем вам нужно позаботиться о фактическом содержании и быть уверенным, что значения верны в соответствии с месяцем, днем ​​и годом.

В любом случае несколько человек предложили использовать метод DateTime.TryParse(), чтобы подложка позаботилась о вас. Но вам нужно будет указать формат в любом случае! так что нет волшебства! вы попадаете в двусмысленность иначе

Ответ 6

Мое решение состояло в том, чтобы пометить поле ввода как доступное только для чтения и разрешить пользователям изменять значение только jqueryui datepicker.

Это интуитивно. Вы можете указать предпочтительный формат и вам нужно только подтвердить этот формат.

Ответ 7

Это работает для меня -

try
{
  String formattedDate = DateTime.Now.ToString(dateFormat);
  DateTime.Parse(formattedDate);
  return true;
}
catch (Exception)
{
  return false;
}