Я изо всех сил пытаюсь понять, почему при синтаксическом анализе строки в формате ISO 8601 , которая анализируется методом Parse
DateTime, неправильно устанавливается свойство Kind
нового объекта DateTime
.Я рассмотрел пост Как создать .NET DateTime из формата ISO 8601 , и в сочетании с документацией ISO, похоже, что метод Parse
должен иметь возможность установить значение Kind
, однако этоне.
Пример:
Console.Write(System.DateTime.Parse("2018-11-17T01:00:00").Kind);
Возвраты: не указано
Однако в соответствии со стандартом ISO это действительный формат, который указывает значениеместное время.
Секция часового пояса
Часовые пояса в ISO 8601 представлены как местное время (местоположение не указано), как UTC, или как смещение от UTC.Если информация о соотношении UTC не указана в представлении времени, предполагается, что время указано в местном времени.
Всемирное координированное время (UTC)
Если время указано в UTC, добавьте Z сразу после времени без пробела.Z - это обозначение зоны для нулевого смещения UTC
Еще более странным является то, что добавление Z к строке устанавливает для свойства Kind
значение Local.
Чтобы получить Kind
значение, правильно установленное для строки UTC, в методе Parse
требуется DateTimeStyle of RoundtripKind.Однако, если Z удален из строки, Kind
снова устанавливается в Unspecified.
Это проблема с классом DateTime?
Разве Microsoft не следовала стандарту ISO?
Или я не понимаю стандарт ISO?