Muchas respuestas aquí indican el almacenamiento como UTC. Pero ten mucho cuidado con esto. Por ejemplo, si programa una cita a las 12:00 pero la cita tiene lugar después del cambio al horario de verano, ¿qué sucederá? UTC no guarda ninguna información sobre si dst estaba activo cuando se almacenó la cita. Muchos sistemas grandes y famosos han cometido este error, donde un usuario envía un correo electrónico a las 9 a.m.en el verano, y luego en invierno la hora enviada muestra las 8 a.m., porque el cálculo de UTC depende de cuándo se mira la fecha y hora, no en cuando se registró la fecha y hora.
Mucho mejor es asumir que su usuario quiere tener los tiempos que escogió siempre. Sin conversión UTC, sin conversión de tiempo, sin información de zona horaria, nada. Hacer una cita de 08:00 a 12:00 el 21 de marzo de 2016 es solo eso. No use la hora local ni la hora UTC, sino la hora no especificada (en json esto no tiene ni z ni +, básicamente, en .NET esto tiene DateTime.Kind = DateTimeKind.Unspecified).
Por supuesto, si su caso de uso es que usted es una empresa que mantiene reuniones con alguien de diferentes zonas horarias y desea ver esta información en, por ejemplo, un calendario de la empresa, pero permite a los usuarios ver qué hora es en su zona horaria, Se vuelve más complicado. El tiempo tiene que ser correcto para diferentes personas en diferentes zonas horarias (el proveedor y el cliente).
En esos casos, incluso puede registrar cuándo se guardó la cita en la base de datos, en qué zona horaria y si eso incluía dst o no. De esa manera, siempre puede calcular la hora local en cualquier otra cosa, ya sea lo que sería ahora o lo que se pretendía que fuera históricamente. Porque las zonas horarias no son estáticas, lo que complica aún más las cosas.
Afortunadamente, aquí es donde entran bibliotecas como http://nodatime.org/ y son muy recomendables. Trabajan con fechas mucho más consistentemente. Incluso entonces, recomendaría envolver todas sus variables y lógica de fecha y hora en sus propios contenedores, utilizando interfaces para que puedan burlarse, y luego aún puede cambiar la lógica más tarde.