Si usa .Net, puede usar TimeZoneInfo
. Como etiquetó la pregunta con 'C#', asumiré que sí.
El primer paso es obtener el TimeZoneInfo
para la zona horaria en la que desea realizar la conversión. En tu ejemplo, la zona horaria de NY. Aquí está una manera que puede hacerlo:
//This will get EST time zone
TimeZoneInfo clientTimeZone
= TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
//This will get the local time zone, might be useful
// if your application is a fat client
TimeZoneInfo clientTimeZone = TimeZoneInfo.Local;
Entonces, después de leer un DateTime
de su base de datos, es necesario asegurarse de que su Kind
está ajustada correctamente.Suponiendo que los DateTime
's en el PP están en UTC (por cierto, que generalmente se recomienda), puede prepararlo para ser convertido de esta manera:
DateTime aDateTime = dataBaseSource.ReadADateTime();
DateTime utcDateTime = DateTime.SpecifyKind(aDateTime, DateTimeKind.Utc);
Por último, con el fin de convertir a una zona horaria diferente, simplemente hacer esto:
DateTime clientTime = TimeZoneInfo.ConvertTime(utcDateTime, clientTimeZone);
Algunas observaciones adicionales:
TimeZoneInfo
pueden ser almacenados en los campos estáticos, si usted está interesado sólo en unas pocas zonas horarias específicas;
TimeZoneInfo
almacenar información sobre el horario de verano. Entonces, no tendrías que preocuparte por eso;
- Si su aplicación es web, descubrir en qué zona horaria se encuentra su cliente puede ser difícil. Una forma se explica aquí: http://kohari.org/2009/06/15/automagic-time-localization/
Espero que esto ayude. :)
Esto debe aceptarse como la respuesta –