Подтвердить что ты не робот

Вывод DateTime.TryParse с датами формата yyyy-dd-MM

У меня есть следующая дата в строковом формате "2011-29-01 12:00". Теперь я пытаюсь преобразовать это в формат datetime со следующим кодом:

DateTime.TryParse(dateTime, out dt); 

Но я все равно получаю dt как {1/1/0001 12:00:00 AM}. Не могли бы вы рассказать мне, почему? и как я могу преобразовать эту строку на сегодняшний день.

EDIT: Я только что видел, что все упомянули использование аргумента формата. Я сейчас упомянул, что не могу использовать параметр формата, поскольку у меня есть некоторая настройка, чтобы выбрать пользовательскую дату, соответствующую желаемому пользователю, и на основе этого пользователя можно автоматически получать дату в текстовом поле в этом формате с помощью jQuery datepicker.

4b9b3361

Ответ 1

Это должно работать на основе вашего примера "2011-29-01 12:00"

DateTime dt;
DateTime.TryParseExact(dateTime, 
                       "yyyy-dd-MM hh:mm tt", 
                       CultureInfo.InvariantCulture, 
                       DateTimeStyles.None, 
                       out dt);

Ответ 2

Вам нужно использовать метод ParseExact. Это берет строку в качестве второго аргумента, который указывает формат, в котором находится дата-время, например:

// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
try
{
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

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

Если вероятность того, что вход будет некорректным (например, пользователем), было бы лучше использовать TryParseExact вместо исключений для обработки ошибки:

// Parse date and time with custom specifier.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
DateTime result;
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result))
{
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
else
{
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

Ответ 3

Из DateTime в msdn:

Тип: System.DateTime% Когда этот метод возвращает, содержит DateTime значение, эквивалентное дате и времени, содержащимся в s, если преобразование выполнено успешно, или MinValue, если преобразование завершилось неудачно. преобразование завершается с ошибкой, если параметр s равен null, является пустой строкой (""), или не содержит допустимого строкового представления даты и времени. Этот параметр передается неинициализированным.

Используйте parseexact со строкой формата "yyyy-dd-MM hh:mm tt".

Ответ 4

Это работает:

DateTime dt = DateTime.ParseExact("2011-29-01 12:00 am", "yyyy-dd-MM hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);

Ответ 5

Попробуйте использовать безопасный метод TryParseExact

DateTime temp;
string   date = "2011-29-01 12:00 am";

DateTime.TryParseExact(date, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp);

Ответ 6

DateTime dt = DateTime.ParseExact("11-22-2012 12:00 am", "MM-dd-yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);

Ответ 7

Если вы даете пользователю возможность изменить формат даты и времени, вам нужно будет создать соответствующую строку формата, используемую для синтаксического анализа. Если вы знаете возможные форматы дат (т.е. Пользователь должен выбрать из списка), это намного проще, потому что вы можете создавать эти строки форматирования во время компиляции.

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