public static List <DateTime> GenerateGasDayHoursUtc(this DateTime gasDay, GasTimeZoneInfo gasTimeZoneInfo) { var timeZone = TimeZoneInfo.FindSystemTimeZoneById(gasTimeZoneInfo.TimeZoneName); var gasDayHours = new List <DateTime>(); var startDateTime = new DateTime(gasDay.Year, gasDay.Month, gasDay.Day, gasTimeZoneInfo.GasDayOffset, 0, 0, DateTimeKind.Unspecified); var hourlyUtc = startDateTime.ConvertToUtc(gasTimeZoneInfo.TimeZoneName); var totalHours = 24; for (var i = 0; i < totalHours; i++) { var newHourly = hourlyUtc.AddHours(i); gasDayHours.Add(newHourly); if (timeZone.IsInvalidTime(newHourly)) { totalHours--; } if (timeZone.IsAmbiguousTime(newHourly)) { totalHours++; } } return(gasDayHours); }
public static bool IsWithinGasDay(this DateTime dateTimeUtc, GasTimeZoneInfo gasTimeZoneInfo) { return(dateTimeUtc.GetGasDay(gasTimeZoneInfo.GasDayOffset, gasTimeZoneInfo.TimeZoneName) == SystemTime.UtcNow().GetGasDay(gasTimeZoneInfo.GasDayOffset, gasTimeZoneInfo.TimeZoneName)); }
public static DateTime GetGasDayEndDateTimeUtc(this DateTime gasDay, GasTimeZoneInfo gasTimeZoneInfo) { return(gasDay.GetGasDayEndDateTimeUtc(gasTimeZoneInfo.GasDayOffset, gasTimeZoneInfo.TimeZoneName)); }
public static bool IsGasDayDayAhead(this DateTime gasDayDate, GasTimeZoneInfo gasTimeZoneInfo) { var utcNowGasDay = SystemTime.UtcNow().GetGasDay(gasTimeZoneInfo.GasDayOffset, gasTimeZoneInfo.TimeZoneName); return(gasDayDate == utcNowGasDay.AddDays(1)); }
public static IEnumerable <DateTime> GenerateDateRangeGasDayHoursUtc(this DateTime startDate, DateTime endDate, GasTimeZoneInfo gasTimeZoneInfo) { return(GenerateDailyDateRange(startDate, endDate).SelectMany(day => day.GenerateGasDayHoursUtc(gasTimeZoneInfo))); }