qué pdt pacifico mexico los hora españa california angeles actual c# .net timezone

c# - pdt - hora utc



¿Cómo convierto UTC a PST o PDT dependiendo de la hora actual en California? (1)

No puedo usar DateTime.Now porque el servidor no se encuentra necesariamente en Calfornia


Dos opciones:

1) Utiliza TimeZoneInfo y DateTime :

using System; class Test { static void Main() { // Don''t be fooled - this really is the Pacific time zone, // not just standard time... var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); var utcNow = DateTime.UtcNow; var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone); Console.WriteLine(pacificNow); } }

2) Usar mi proyecto Noda Time :)

using System; using NodaTime; class Test { static void Main() { // TZDB ID for Pacific time DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"]; // SystemClock implements IClock; you''d normally inject it // for testability Instant now = SystemClock.Instance.Now; ZonedDateTime pacificNow = now.InZone(zone); Console.WriteLine(pacificNow); } }

Obviamente, soy parcial, pero prefiero usar Noda Time, principalmente por tres razones:

  • Puede usar la información de zona horaria de TZDB, que es más portátil fuera de Windows. (También puede usar zonas basadas en BCL).
  • Hay diferentes tipos para diferentes tipos de información, lo que evita las rarezas de DateTime intentar representar tres tipos diferentes de valor, y no tener el concepto de simplemente representar "una fecha" o "una hora del día"
  • Está diseñado con capacidad de prueba en mente