zona utcnow tolocaltime specifykind now horaria hora convertir convert c#

c# - specifykind - datetime utcnow tolocaltime()



¿Cuál es la diferencia entre DateTime.UtcNow y DateTime.Now.ToUniversalTime() (5)

Para mí ambos son iguales. ¿Es UtcNow simplemente un atajo?


Bueno, la implementación real es (se puede ver en la referencesource de referencesource ):

public static DateTime Now { get { Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Local); DateTime utc = UtcNow; Boolean isAmbiguousLocalDst = false; Int64 offset = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utc, out isAmbiguousLocalDst).Ticks; long tick = utc.Ticks + offset; if (tick>DateTime.MaxTicks) { return new DateTime(DateTime.MaxTicks, DateTimeKind.Local); } if (tick<DateTime.MinTicks) { return new DateTime(DateTime.MinTicks, DateTimeKind.Local); } return new DateTime(tick, DateTimeKind.Local, isAmbiguousLocalDst); } }

ToUniversalTime() llama a TimeZoneInfo.ConvertTimeToUtc(this, TimeZoneInfoOptions.NoThrowOnInvalidTime)

mientras que UtcNow es justo:

long ticks = 0; ticks = GetSystemTimeAsFileTime(); return new DateTime( ((UInt64)(ticks + FileTimeOffset)) | KindUtc);


Creo que usar DateTime.UTCNow consideraría el valor de la propiedad DateTime.Kind como UTC mientras que con ToUniversalTime puede proporcionar la propiedad Kind con un objeto local de fecha y hora.



No es un acceso directo, DateTime.Now usa DateTime.UtcNow internamente y luego aplica la localización. En resumen, use ToUniversalTime () si ya tiene DateTime.Now y necesita convertirlo a UTC, use DateTime.UtcNow si solo desea recuperar la hora actual en UTC.


En realidad es al revés. La propiedad Now se implementa como:

public static DateTime Now { get { return UtcNow.ToLocalTime(); } }