如何在太平洋标准时间中创建设置为午夜的DateTimeOffset

Mar*_*rta 2 c# scheduled-tasks quartz.net asp.net-mvc-3 quartz.net-2.0

我正在使用Quartz.NET(http://quartznet.sourceforge.net/),我试图在午夜设置开始日期.但是我在创建这个日期时遇到了问题.此应用程序将站在不同时区的不同服务器上.但我希望这个时间总是在太平洋标准时间设定为午夜.

这是我的工作代码:

    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();
Run Code Online (Sandbox Code Playgroud)

我需要DateTimeOffset格式的日期,即太平洋标准时间午夜.我使用MVC 3.任何帮助非常感谢!

Vis*_*lam 6

无论服务器如何,这都应该为您提供午夜PST日期.

DateTime dateInDestinationTimeZone = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date;
Run Code Online (Sandbox Code Playgroud)

  • 由于我们使用的是 UTC,因此夏令时 (DST) 将自动计算在内。 (2认同)

Loc*_*ith 5

很抱歉让这个死而复生,但我发现@Vishnu 提供的解决方案对我不起作用。

我正在一台 EST 机器上工作,创建对象的结果是我当地时间的午夜。另外,提到的解决方案并没有创建一个DateTimeOffset对象,而是创建一个DateTime对象。

我终于找到了一个对我有用的解决方案,我想我会在这里分享它,因为其他人可能会发现它有用。

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

这里的技巧是使用Ticks,这使得计算变得非常“无缝”。