Skip to content

Session Time

Anatoly Kulakov edited this page Mar 15, 2021 · 17 revisions

Время доклада

Время начала (StartTime) и окончания (EndTime) каждого доклада хранятся в документе Встречи в стандарте UTC. Формат записи соответствует ISO-8601 и для C#-програм может быть представлен шаблоном: yyyy-MM-ddTHH:mm:ssZ.

Для перевода времени выступления из UTC в локальное время необходимо воспользоваться информацией о часовом поясе (TimeZone). Она хранится в документе Сообщества по стандарту IANA.

На данный момент не существует стандартного способа работать кросс-платформенно с часовыми поясами в .NET. Поддержка базы данных IANA отсутствует для Windows систем. Для преобразования можно воспользоваться библиотекой NodaTime или другими решениями.

Город IANA Time Zone Windows Time Zone UTC Offset
Санкт-Петербург Europe/Moscow Russian Standard Time +03:00
Москва Europe/Moscow Russian Standard Time +03:00
Саратов Europe/Saratov Saratov Standard Time +04:00
Красноярск Asia/Krasnoyarsk North Asia Standard Time +07:00
Казань Europe/Moscow Russian Standard Time +03:00
Новосибирск Asia/Novosibirsk Novosibirsk Standard Time +07:00
Омск Asia/Omsk Omsk Standard Time +06:00
Нижний Новгород Europe/Moscow Russian Standard Time +03:00
Уфа Asia/Yekaterinburg Ekaterinburg Standard Time +05:00
Самара Europe/Samara Russia Time Zone 3 +04:00
Пенза Europe/Moscow Russian Standard Time +03:00
Краснодар Europe/Moscow Russian Standard Time +03:00
Екатеринбург Asia/Yekaterinburg Ekaterinburg Standard Time +05:00

Рекомендации

⚠️ Для отображения времени Встречи в пользовательском интерфейсе рекомендуется показывать его в локальном времени Сообщества в рамках которого произошла встреча.

Преобразование времени в формате UTC в заданный часовой пояс:

var talkTime = DateTime.ParseExact("2015-12-22T17:30:00Z", "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
var localTalkTime = TimeZoneInfo.ConvertTimeFromUtc(talkTime, timeZone);

⚠️ Для хранения всегда необходимо преобразовывать локальное время в котором произошла встреча в стандарт UTC.

Преобразование времени в заданном часовом поясе в формат UTC:

var localTalkTime = DateTime.ParseExact("2015-12-22T20:30:00", "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
var talkTime = TimeZoneInfo.ConvertTimeToUtc(localTalkTime, timeZone);

См. таже

Clone this wiki locally