Que tal Miguel.
Excelente la información que me diste, es exactamente como dices.
Pero hice una pequeña variación en comparación de lo que me aconsejaste y me pareció que esta bien.
En ves de guardar en la base de datos con fechas UTC lo guarde con el formato "local", en C# el objeto DateTime tiene el método ToLocalTime() y lo utilice antes de guardar en la base de datos, así que la hora en que guardo en mi base de datos es realmente UTC-3 (Asuncion/Paraguay) y cuando el Web Api lo devuelve lo devuelve de nuevo como un UTC.
Esto es "bueno" para mi pues dentro del input, al estar enlazado al modelo por alguna razón (que no se jeje) se muestra en formato "hora local" pero la propiedad, que muestra angular, esta en UTC .Así que cuando envió viaja como UTC al WEB API pero lo guardo como "local" en la base de datos y al recuperlo se envía de nuevo al browser como UTC y el input (enlazado con el modelo mediante angular) lo muestra de nuevo como "local".
No se si es la mejor manera pero funciona.
Ejemplo: en el Front-end
<input type="time" id="horaSalidaManana"
name="horaSalidaManana"
class="form-control"
ng-model="vm.historicoHorario.horaSalidaManana"
ng-required="true" />
En el input: 23:02 ==> se muestra "1970-01-01T02:02:00.000Z" en el modelo.
Ejemplo: en el Back-end
historicoHorarioDb.HoraSalidaManana = hhDto.HoraSalidaManana.Value.ToLocalTime();
Archivo donde uso el ToLocalTime
Llega como 02/01/1970 2:02:00 (kind UTC) ==> lo guardo como 01/01/1970 23:02:00 por medio de .ToLocalTime()
Al enviarlo al browser lo envia como "1970-01-02T02:02:00.000Z" pero como a mi no me interesa la parte DATE, estoy recuperando el mismo TIME.
Y bueno a quien le sirva y si alguien ve algún error en la forma en que lo estoy haciendo.
Desde ya gracias por la ayuda.
Atte.
Nestor