Convertir globalmente los tiempos de UTC a los tiempos de fecha locales especificados por el usuario

Estoy almacenando todos los campos de DateTime como hora UTC. Cuando un usuario solicita una página web, me gustaría tomar su zona horaria local preferida (y no la zona horaria local de la máquina del servidor) y mostrar automáticamente todos los campos DateTime en todas las formas web como fechas locales.

Por supuesto, podría aplicar la conversión en cada llamada a DateTime.ToString () en cada formulario o implementar alguna utilidad auxiliar, pero es una tarea que requiere mucho tiempo, y también hay algunos componentes de terceros que son difíciles de configurar con plantillas personalizadas de visualización de DateTime. .

Esencialmente, me gustaría que la clase DateTime se comporte de la siguiente manera:

from this moment on for this web request, 
whenever some code calls DateTime.ToString(), convert it to the local time 
        using the timezone offset given at the very beginning of the web request, 
but if possible, please keep .NET core library DateTime.ToString() calls intact 
       (I don't want to mess up event logging timestamps etc.)

¿Hay alguna forma de hacerlo?

Por cierto, estoy usando ASP.NET MVC 4, si importa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta