NodaDateTime ZonedDateTimePattern Разбор не распознает смещение - PullRequest
0 голосов
/ 22 апреля 2020

Не удается получить NodaDateTime для распознавания любого другого смещения, кроме UT C в формате: + ЧЧ

Следующее работает нормально:

var pattern = ZonedDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>", DateTimeZoneProviders.Tzdb);

var dateString = "24/03/2020 13:44:58 +00";

var result = pattern.Parse(dateString);

Следующее не делает:

var pattern = ZonedDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>", DateTimeZoneProviders.Tzdb);

var dateString = "24/03/2020 13:44:58 +10";

var result = pattern.Parse(dateString);

Фактически нет смещения, кроме +00 работ. И это также демонстрирует такое же поведение с + o

1 Ответ

1 голос
/ 23 апреля 2020

Проблема в том, что вы пытаетесь проанализировать что-то как дату / время и часовой пояс , но на самом деле вы предоставляете только смещение . Это означает, что Noda Time использует часовой пояс по умолчанию из «шаблона» в шаблоне, который является UT C. Затем он проверяет, что смещение в значении является действительным для локальной даты / времени в значении, в UT C ... которого никогда не будет, если оно не равно 0. Исключение пытается прояснить это:

Указанное смещение недопустимо для данной даты / времени. Анализируемое значение: '24/03/2020 13:44:58 +10'.

Полученное вами значение на самом деле не представляет "дату и время с часовым поясом" - оно представляет «дату и время со смещением UT C». В Noda Time это обрабатывается типом OffsetDateTime. Просто используйте OffsetDateTimePattern и все будет хорошо:

var pattern = OffsetDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>");
var dateString = "24/03/2020 13:44:58 +10";
var result = pattern.Parse(dateString);
Console.WriteLine(result.Value); // Successful :)
...