Si desea obtener provecho de su máquina zona horaria local puede utilizar myDateTime.ToUniversalTime()
para obtener la hora UTC de la hora local o myDateTime.ToLocalTime()
para convertir la hora UTC a el tiempo de la máquina local.
// convert UTC time from the database to the machine's time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var localTime = databaseUtcTime.ToLocalTime();
// convert local time to UTC for database save
var databaseUtcTime = localTime.ToUniversalTime();
Si necesita convertir el tiempo de/a otros zonas horarias, es posible utilizar TimeZoneInfo.ConvertTime()
o TimeZoneInfo.ConvertTimeFromUtc()
.
// convert UTC time from the database to japanese time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var japaneseTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var japaneseTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, japaneseTimeZone);
// convert japanese time to UTC for database save
var databaseUtcTime = TimeZoneInfo.ConvertTimeToUtc(japaneseTime, japaneseTimeZone);
List of available timezones
TimeZoneInfo class on MSDN
El 'DateTimeKind' solo contiene local, no especificado y UTC. Probablemente no sea posible. Quiero usar una zona horaria particular. – hardywang
@hardywang Si todo lo que necesita es especificar una hora y un desplazamiento de UTC, entonces puede usar [DateTimeOffset] (https://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx). Si realmente necesita identificar un huso horario en particular, entonces necesita combinar DateTime con un [TimeZoneInfo] (https://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx). Consulte [Elegir entre DateTime, DateTimeOffset y TimeZoneInfo] (https://msdn.microsoft.com/en-us/library/bb384267.aspx) para una discusión. –