Как конвертировать дату и время точно в то, что я получаю на выходе со стороны клиента - PullRequest
2 голосов
/ 18 апреля 2020

У меня есть переменная как свойство:

DateTime? something;
something  = Convert.ToDateTime(d1);

, где d1 = '04/20/2020 12:50 PM';

Я получаю ошибку времени выполнения:

Строка не была распознана как действительный datetime

Затем я попробовал этот код:

something  = DateTime.TryParseExact(d1, "MM/dd/yyyy HH:mm tt", null);

и получаю ошибку времени компиляции:

Нет перегрузки для метода TryParseExact принимает 3 аргумента

Затем я попытался преобразовать его, как показано ниже

something  = DateTime.TryParseExact(d1, "MM/dd/yyyy HH:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt);

и получил еще одну ошибку во время компиляции:

Невозможно неявно преобразовать тип bool в System.DateTime?

Как преобразовать nullable datetime в формат datetime?

enter image description here

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

См. this

public static bool TryParseExact (string s, string format, IFormatProvider provider, System.Globalization.DateTimeStyles style, out DateTime result);

Параметры

s String Строка, содержащая дату и время для преобразования.

Формат String Требуемый формат s.

provider IFormatProvider Объект, предоставляющий специфическую для культуры информацию о форматировании для s.

style DateTimeStyles Битовая комбинация одного или нескольких значений перечисления, которые указывают на допустимый формат s .

result DateTime Когда этот метод возвращает значение, содержит значение DateTime, эквивалентное дате и времени, содержащемуся в s, если преобразование выполнено успешно, или MinValue, если преобразование не удалось. Преобразование завершается неудачно, если параметр s или format имеет значение null, является пустой строкой или не содержит даты и времени, соответствующих шаблону, указанному в формате. Этот параметр передается неинициализированным.

Возвращает логическое значение true, если s был успешно преобразован; в противном случае - false.

Исключения Стили ArgumentException не являются допустимым значением DateTimeStyles.

-или-

стили содержат недопустимую комбинацию значений DateTimeStyles (например, оба типа AssumeLocal и AssumeUniversal).

Итак, нам нужно проверить успех или неудачу и обработать его.

DateTime? something;
if(DateTime.TryParseExact(d1, "MM/dd/yyyy HH:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt))
    something = dt;
else
    something = null;
1 голос
/ 18 апреля 2020

Это правильное использование TryParseExact

public static void Main()
{
    string d1 = "04/20/2020 12:50 PM";

    if (DateTime.TryParseExact(d1, "MM/dd/yyyy HH:mm tt", 
        CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt));

        Console.WriteLine("Date time OK: " + dt);
    else
        Console.WriteLine("Invalid Date time: " + d1);
}
1 голос
/ 18 апреля 2020

TryParseExact возвращает логическое значение, объект даты и времени dt

public static void Main()
    {
        string d1 = "04/20/2020 12:50 PM";

        var result  = DateTime.TryParseExact(d1, "MM/dd/yyyy HH:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt);

        Console.WriteLine(dt);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...