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