UTC Дата строка времени в Zoned DateTime с использованием NodaTime

Мне нужно конвертировать UTC DateTime строка в ZonedDateTime,

UTC DateTime Строки могут быть только один шаблон(M/dd/yyyy h:mm:ss tt) так как только этот формат поддерживается в SharePoint DateTime введите столбец.

При условии, что (5/28/2013 1:00:00 PM) как мое время UTC, как я могу преобразовать его в ZonedDateTime? В настоящее время я использую приведенный ниже код для получения ZonedDateTime,

var dateTimeZone = DateTimeZoneProviders.Tzdb[zoneID];
var inst = Instant.FromUtc(year, month, day, hour, minute);
ZonedDateTime dz = new ZonedDateTime(inst, dateTimeZone);

Приведенный выше код требует year, month, day, hour, а также minute как int ценности. Есть ли более простой способ получить ZonedDateTime прямо из строки UTC?

1 ответ

Я думаю, что вы не уверены в своих исходных данных. SharePoint не хранит строки для дат. Хранит их как DateTime типы. Они в UTC, но они не строки.

Если у вас есть строковое представление, то в какой-то момент в вашем коде вы сделали .ToString() или аналогичный, и он взял по умолчанию "G" спецификатор формата.

Так что вы должны просто иметь возможность использовать:

var inst = Instant.FromDateTimeUtc(yourDateTime);
var dz = new ZonedDateTime(inst, dateTimeZone);

Другой вариант - использовать DateTimeOffset поля в SharePoint вместо UTC DateTime поля. Читайте здесь. Тогда вы можете использовать Instant.FromDateTimeOffset(),

Другие вопросы по тегам