private TimeSpan GetDailyDueTime() { DateTime now, firstExecution; switch (this.DailyExecutionDateTimeKind) { case DateTimeKind.Local: #region DateTimeKind.Local now = TimeZoneUtility.ConvertUTCDateToLocalizedDate(DateTime.UtcNow, this.DailyLocalizedExecutionTimeZoneInfo); firstExecution = new DateTime(now.Year, now.Month, now.Day , this.DailyLocalizedExecutionTime.Hour , this.DailyLocalizedExecutionTime.Minute , this.DailyLocalizedExecutionTime.Second , this.DailyLocalizedExecutionTime.Millisecond); if (firstExecution < now) { firstExecution = firstExecution.AddDays(1); } return((TimeSpan)(TimeZoneUtility.ConvertUTCDateToLocalizedDate(firstExecution, this.DailyLocalizedExecutionTimeZoneInfo) - now)); #endregion case DateTimeKind.Utc: #region DateTimeKind.Utc now = DateTime.UtcNow; firstExecution = new DateTime(now.Year, now.Month, now.Day , this.DailyUTCExecutionTime.Hour , this.DailyUTCExecutionTime.Minute , this.DailyUTCExecutionTime.Second , this.DailyUTCExecutionTime.Millisecond); if (firstExecution < now) { firstExecution = firstExecution.AddDays(1); } return((TimeSpan)(firstExecution - now)); #endregion default: throw new NotSupportedException(); } }
public void Test_DailyExecutionTimeWithDaylightSavingAdjustment() { TimeZoneInfo timeZoneInfo = TimeZoneUtility.GetTimeZoneInfo("GMT Standard Time"); List <DateTime> futureDates = new List <DateTime>() { new DateTime(2011, 3, 24, 23, 0, 0, DateTimeKind.Utc), new DateTime(2011, 3, 25, 23, 0, 0, DateTimeKind.Utc), new DateTime(2011, 3, 26, 23, 0, 0, DateTimeKind.Utc), new DateTime(2011, 3, 27, 23, 0, 0, DateTimeKind.Utc), new DateTime(2011, 3, 28, 23, 0, 0, DateTimeKind.Utc), new DateTime(2011, 3, 29, 23, 0, 0, DateTimeKind.Utc) }; DateTime nowLocal = TimeZoneUtility.ConvertUTCDateToLocalizedDate(futureDates[0], timeZoneInfo).AddDays(-1); foreach (DateTime fd in futureDates) { Trace.WriteLine((TimeZoneUtility.ConvertUTCDateToLocalizedDate(fd, timeZoneInfo) - nowLocal).ToString() + "\n"); nowLocal = (TimeZoneUtility.ConvertUTCDateToLocalizedDate(fd, timeZoneInfo)); } }