У меня есть даты в формате UTC в базе данных, и у меня есть часовой пояс пользователя в их таблице настроек.
У меня есть метод расширения для преобразования из UTC в пользовательское время:
public static DateTime ToClientTime(this DateTime dt)
{
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time"); //Hardcoded timezone
return TimeZoneInfo.ConvertTimeFromUtc(dt, cstZone);
}
Как вы можете видеть в приведенном ниже коде, на данный момент он имеет жестко заданное имя часового пояса, и я должен передать параметром это значение (передав часовой пояс пользователя).
В CurrentThread я установил культуру пользователя, поэтому весь код в этом запросе ведет себя в этой культуре (форматы даты, ресурсы, числовые форматы). Есть способ сохранить часовой пояс пользователя в глобальном объекте, таком как CurrentThread или что-то в этом роде?
Я пытаюсь избежать передачи часового пояса вышеуказанному методу расширения и вместо этого получить часовой пояс из глобального объекта, такого как CurrentThread. Метод расширения будет вызываться из кода контроллера, а также из представлений.
ThreadLocalиThreadStatic. Вы можете попробовать контекст логического вызова (CallContext.LogicalSetData/CallContext.LogicalGetData). - person Matt Johnson-Pint   schedule 28.02.2017