Я передаю время UTC ± 00: 00 методу GetNextValidTimeAfter () в планировщике кварца, чтобы вычислить следующее допустимое время для планирования на основе указанного выражения c cron, но так как мое системное время находится в PST, результат возвращается в формате UTC-08: 00, но мне нужно получить результат в формате UTC ± 00: 00.
CronExpression expression = new CronExpression("0 0 1 1/1 * ? *"); //Daily 1 AM
DateTime EasternTimeUTC = new DateTime(2020, 3, 7, 6, 00, 0); //Corresponding UTC time for EST time 7th March 1 AM
DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(EasternTimeUTC);
nextFireUTCTime возвращает следующую действительную дату / время как 3/8/2020 9:00 AM, которая в формате UTC-08: 00, поскольку системный часовой пояс указан в формате PST, но мне нужен результат в формате UTC ± 00: 00, который должен быть 3/8/2020 6:00 AM. Как мне получить это значение?
Поскольку я не смог найти правильного решения вышеуказанной проблемы, я попробовал следующее.
Моя система всегда будет находиться в часовом поясе PST, что означает результат, который я получаю из метода кварцевого планировщика GetNextValidTimeAfter (), всегда будет возвращаться в формате UTC-08: 00. Чтобы получить выходные данные в формате часового пояса EST, я вычитаю 8 или 7 часов из результата, основанного на летнем времени, но это решение не работает, когда запланированное время падает с 8 марта 12.00 до 1.59.
CronExpression expression = new CronExpression("0 0 1 1/1 * ? *");
DateTime EasternTimeUTC = new DateTime(2020, 3, 7, 6, 00, 0);
DateTimeOffset? nextFireUTCTime = expression.GetNextValidTimeAfter(EasternTimeUTC);
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime UTCNextTime1 = DateTime.UtcNow;
if (timeZone.IsDaylightSavingTime(nextFireUTCTime.GetValueOrDefault()))
{
UTCNextTime1 = nextFireUTCTime.Value.DateTime.AddHours(-7);
}
else
{
UTCNextTime1 = nextFireUTCTime.Value.DateTime.AddHours(-8);
}