Я сталкиваюсь с этим вопросом о том, как определить, попадает ли DateTime.UtcNow
(например, 2018-01-01T20: 00: 00Z) в данный диапазон дней и времен, которые находятся в другом часовом поясе.Конкретные даты не указаны, только дни недели и время суток.Время указано в стандартном формате ISO 8601.
Чтобы упростить этот вопрос, может быть, как проверить, находится ли время UTC в Китае в рабочие часы.
Например, указанный день и временной интервал дан кем-то из Китая вчасовой пояс +08: 00, это может быть: FromDayOfWeek = "Friday", FromTimeOfDay = "17:00:00+8:00", ToDayOfWeek = "Monday", ToTimeOfWeek = "08:00:00+8:00".
Мне нужно определить, находится ли "сейчас" в Китае какое-то время между заданным диапазоном (пятница 17: 00: 00 + 8: 00 - понедельник 08: 00: 00 + 8: 00).
Я застрял в том, как преобразовать DateTime и получить день недели по местному времени, так как 2018-01-01T20: 00: 00Z - понедельник в Великобритании, но вВ то же время, поскольку в Китае +08: 00, в Китае уже вторник.
Мой подход:
// parse the time to get the zone first (+08:00)
TimeSpan ts = TimeSpan.Parse("-08:00");
// Create a custom time zone since the time zone id is not given, and cannot be searched by SearchTimeZoneById
TimeZoneInfo tzi = TimeZoneInfo.CreateCustomTimeZone(zoneId, ts, displayName, standardName);
DateTime localDateTime = TimeZoneInfo.ConvertTime(Date.UtcNow, tzi);
String localDay = localDateTime.DayOfWeek;
// Determine if localDay is between FromDayOfWeek and ToDayOfWeek
// cast the days to integers from 1 (Monday) to 7 (Sunday)
// create an array of days in integar days = [5, 6, 7, 1]
// if days.contains(localDays), check the times
...
Кто-нибудь может предложить какие-то лучшие решения?Я не уверен, работает ли мой, и есть пробелы в том, как обращаться с летним временем, так как зона изменится, и как проверить диапазон времени.Я новичок в C #, любые предложения библиотек, которые я могу использовать, это здорово!