using System.Collections.Generic;
private static readonly TimeSpan StartTimeHour = TimeSpan.Parse("16:00:00");
private static readonly List<int> TenantTimeZoneIds = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
public static void Main()
Console.WriteLine("Desired run time: " + StartTimeHour);
var utcNow = DateTime.UtcNow;
var timeZoneIdsToSend = GetTimeZoneIdsToSend(utcNow);
Console.WriteLine("Utc: " + DateTime.UtcNow + Environment.NewLine);
Console.WriteLine("Sending Tenant TimeZoneIds: " + string.Join(',', timeZoneIdsToSend));
private static IEnumerable<int> GetTimeZoneIdsToSend(DateTime currentUtcDateTime)
return TenantTimeZoneIds.Where(id => ShouldSendTimeZoneId(currentUtcDateTime, id));
private static bool ShouldSendTimeZoneId(DateTime currentUtcDateTime, int newTimeZoneId)
var convertedTimeZoneId = newTimeZoneId;
var utcDateTimeOffset = ((DateTimeOffset) DateTime.SpecifyKind(currentUtcDateTime, DateTimeKind.Utc));
var isDaylightSavingsTime = utcDateTimeOffset.ToEasternTime().IsDaylightSavingTime();
if (isDaylightSavingsTime)
if (newTimeZoneId == 7 && !isDaylightSavingsTime)
if (DateTime.Now.IsDaylightSavingTime())
var newOffset = -1 * (convertedTimeZoneId - 1);
var easternTime = utcDateTimeOffset.ToEasternTime();
var easternTimeOffset = easternTime.AddHours(newOffset);
Console.WriteLine(newTimeZoneId + " -- " + easternTimeOffset.TimeOfDay + " > " + StartTimeHour + " -- " + (easternTimeOffset.TimeOfDay > StartTimeHour));
return easternTimeOffset.TimeOfDay > StartTimeHour;
public static class DateTimeOffsetExtensions
public static DateTime ToEasternTime(this DateTimeOffset dateTime)
estInfo = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");
catch (TimeZoneNotFoundException)
estInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
return TimeZoneInfo.ConvertTime(dateTime, estInfo).DateTime;