2 votes

Comment créer un DateTimeOffset réglé sur minuit en heure normale du Pacifique ?

J'utilise Quartz.NET( http://quartznet.sourceforge.net/ ) et j'essaie de fixer la date de début à minuit. Mais j'ai un problème pour créer cette date. Cette application sera installée sur différents serveurs dans différents fuseaux horaires. Mais je veux que cette heure soit toujours fixée à minuit à l'heure normale du Pacifique.

Voici mon code qui ne fonctionne pas :

    TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");       
    DateBuilder dateBuilder = DateBuilder.NewDateInTimeZone(info).AtHourMinuteAndSecond(0,0,0);           
    DateTimeOffset runTime = dateBuilder.Build();          

    IJobDetail job = JobBuilder.Create<TimeJob>()
        .WithIdentity("job1", "group1")
        .Build();

    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger1", "group1")
        .StartAt(runTime)
        .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
        .Build();

J'ai besoin d'une date au format DateTimeOffset qui serait à minuit, heure normale du Pacifique. J'utilise MVC 3. Toute aide est la bienvenue !

8voto

Vishnu Arunachalam Points 416

Cela devrait vous donner la date PST de minuit, quels que soient les serveurs.

DateTime dateInDestinationTimeZone = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date;

5voto

Lockszmith Points 415

Désolé de ressusciter ce sujet, mais la solution fournie par @Vishnu n'a pas fonctionné pour moi.

Je travaille sur une machine EST, et le résultat de l'objet créé, était à minuit dans mon heure locale. De plus, la solution mentionnée n'a pas créé d'objet DateTimeOffset mais un DateTime un.

J'ai finalement trouvé une solution qui a fonctionné pour moi, j'ai pensé que je devais la partager ici car quelqu'un d'autre pourrait la trouver utile.

var userTimeZone =
        TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var startTime = new DateTimeOffset(DateTime.Today.Ticks,
        userTimeZone.GetUtcOffset(DateTime.Today) );

L'astuce ici est d'utiliser Ticks ce qui rend le calcul très "transparent".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X