2

我正在使用 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();

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

4

2 回答 2

8

无论服务器如何,这都应该为您提供太平洋标准时间的午夜日期。

DateTime dateInDestinationTimeZone = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, System.TimeZoneInfo.Utc.Id, "Pacific Standard Time").Date;
于 2012-04-24T16:56:12.023 回答
5

很抱歉从死里复活,但我发现@Vishnu 提供的解决方案对我不起作用。

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

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

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

这里的诀窍是使用Ticks,这使得计算非常“无缝”。

于 2014-01-20T15:57:29.940 回答