В БД хранится дата в колонке типа datetime в некотором непонятном формате, и к ней — поправка под названием TimeZone в виде числа.
Опытным путем установлено, что:
1. При выборе в UI часового пояса "GMT (Casablanka, Monrovia, Reykjavik)" (типа, GMT+0, надо полагать), время выводится на форму так, как оно хранится в базе (по крайней мере, отображается SQL SMS), при этом в БД записывается TimeZone == 31.
2. При выборе в UI часового пояса "GMT (Greenwich Mean Time: Dublin, Edinburgh)" (тоже GMT+0???
), время выводится на форму со смещением на час вперед, по сравнению с тем, как оно хранится в базе, при этом в БД записывается TimeZone == 2.
3. При выборе в UI часового пояса "GMT +3 (Moscow)", время выводится на форму со смещением на 4 часа вперед, по сравнению с тем, как оно хранится в базе, при этом в БД записывается TimeZone == 51.
Вопросы:
1. Почему два GMT+0, один из которых на самом деле +1? Почему GMT +3 (Moscow) на деле +4? Иными словами, что это за формат хранения даты?
2. Как кодируется в этой системе TimeZone? 2, 31, 51 — никакого намека на +n.
Что интересует в конечном итоге, это как имея инстансы DateTime dt и int timeZone получить строку (например, с помощью .ToString("d")). Но с этим я и сам справлюсь, если будут ответы на вопросы 1 и 2.