Конвертация DateTime из пользовательского интерфейса - PullRequest
1 голос
/ 05 мая 2019

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

Я получаю следующее значение из пользовательского интерфейса

var uiDate = "2019-05-03T00:00:00.000Z".

Мне нужно преобразовать это значение в DateTime для дальнейшей обработки.

var dt = Convert.ToDateTime(uiDate);

Значение dt равно "2/2/2019 8:00:00 PM" .

Как мы видим, я всегда получаю один день после преобразования DateTime от даты, выбранной в пользовательском интерфейсе.Я ожидал "3/5/2019".Я не могу понять, почему это происходит после преобразования DateTime?

1 Ответ

1 голос
/ 05 мая 2019

Convert.ToDateTime неявно преобразует значение в местное время.Если вы используете DateTime.ParseExact, вы можете указать соответствующие параметры конвертации:

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        string text = "2019-05-03T00:00:00.000Z";
        DateTime parsed = DateTime.ParseExact(
            text, // The value to parse
            // The pattern to use for parsing
            "yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
            // Use the invariant culture for parsing
            CultureInfo.InvariantCulture,
            // Assume it's already in UTC, and keep it that way
            DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);

        Console.WriteLine(parsed);  // 03/05/2019 00:00:00 (on my machine; format will vary)
        Console.WriteLine(parsed.Kind); // Utc
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...