-
Notifications
You must be signed in to change notification settings - Fork 26
Session Time
Время начала (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);