【问题标题】:How to create a DateTimeOffset set to Midnight in Pacific Standard Time如何在太平洋标准时间创建一个设置为午夜的 DateTimeOffset
【发布时间】:2012-05-05 07:47:01
【问题描述】:

我正在使用 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。 非常感谢任何帮助!

【问题讨论】:

    标签: c# asp.net-mvc-3 scheduled-tasks quartz.net quartz.net-2.0


    【解决方案1】:

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

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

    【讨论】:

    • 如果在 DST 期间运行会发生什么?
    • 由于我们使用 UTC,因此将自动计算夏令时 (DST)。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这个答案被截断了。
    • 对不起,我相信答案包含了一切。我完成了最后一句话背后的想法。
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2010-10-13
    • 2014-08-26
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多