2012-04-24 80 views
2

我正在使用Quartz.NET(http://quartznet.sourceforge.net/),我試圖在午夜設置開始日期。但是我在創建這個日期時遇到了問題。此應用程序將站在不同時區的不同服務器上。但我希望這個時間在太平洋標準時間總是設置爲午夜。如何在太平洋標準時間創建一個DateTimeOffset設置爲午夜

這是我的工作不代碼:

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. 任何幫助非常感謝!

回答

5

無論服務器如何,這應該會給你午夜的PST日期。

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

如果在DST期間運行,會發生什麼情況? – 2012-04-24 17:03:06

+1

由於我們正在使用UTC,日間節省時間(DST)將自動計入。 – 2012-04-24 18:16:39

3

對不起,從死裏復活,但我發現@Vishnu提供的解決方案並不適合我。

我正在使用EST機器,創建對象的結果是在當地時間午夜。 另外,提到的解決方案並未創建一個DateTimeOffset對象,而是一個DateTime之一。

我終於找到了一個適合我的解決方案,覺得我會在這裏分享它,因爲別人可能會覺得它有用。

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

這裏的訣竅是使用Ticks,這使得計算非常「無縫」。

+1

這個答案被切斷了。 – Arithmomaniac 2016-06-17 14:59:50

+0

對不起,我相信答案包含了一切。我完成了最後一句話後面的想法。 – Lockszmith 2016-07-14 18:29:36

相關問題