Pregunta ¿Cómo establecer un huso horario (o un tipo) de un valor de DateTime?


Me refiero a almacenar una hora UTC estricta en una variable DateTime y enviarla en formato ISO 8601.

Para hacer la última he usado .ToString ("aaaa-MM-ddTHH: mm: sszzz"), y ha descubierto que la zona horaria es UTC + 01: 00.

Intenté usar .Kind = DateTimeKind.Utc, pero dice que la propiedad Kind no tiene setter.

¿Cómo especifico explícitamente que la hora está en UTC? ¿Cómo se establece la propiedad Kind?


35
2018-06-04 23:21


origen


Respuestas:


Mientras que la propiedad DateTime.Kind no tiene un setter, el método estático DateTime.SpecifyKind crea una instancia de DateTime con un valor especificado para Kind.

Altenatively hay varios Sobrecargas de constructor DateTime que toman un parámetro DateTimeKind


29
2018-06-05 00:07



Si desea aprovechar su zona horaria de la máquina local, puede usar myDateTime.ToUniversalTime() para obtener la hora UTC de su hora local o myDateTime.ToLocalTime() para convertir la hora UTC a la hora 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 otras zonas horarias, puede usar 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);

Lista de zonas horarias disponibles

Clase TimeZoneInfo en MSDN


32
2018-06-05 10:02



Puedes probar esto también, es fácil de implementar

TimeZone time2 = TimeZone.CurrentTimeZone;
DateTime test = time2.ToUniversalTime(DateTime.Now);
var singapore = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time");
var singaporetime = TimeZoneInfo.ConvertTimeFromUtc(test, singapore);

Cambie el texto al que quiere cambiar la hora estándar.

Utilizar TimeZone característica de C # para implementar.


4
2017-08-20 09:43