/// <summary> /// 间隔天数 /// </summary> /// <param name="left">星期几</param> /// <param name="right">星期几</param> public static int DaysBetween(IsoDayOfWeek left, IsoDayOfWeek right) { if (left == IsoDayOfWeek.None || right == IsoDayOfWeek.None) { return(0); } return(DaysBetween(DayOfWeekHelper.ToSystemWeek(left), DayOfWeekHelper.ToSystemWeek(right))); }
private static bool IsParentalScheduleAllowed(AccessSchedule schedule, DateTime date) { var localTime = date.ToLocalTime(); var hour = localTime.TimeOfDay.TotalHours; return(DayOfWeekHelper.GetDaysOfWeek(schedule.DayOfWeek).Contains(localTime.DayOfWeek) && hour >= schedule.StartHour && hour <= schedule.EndHour); }
/// <summary> /// 尝试获取间隔天数 /// </summary> /// <param name="left">星期几</param> /// <param name="right">星期几</param> /// <param name="days">间隔天数</param> public static bool TryDaysBetween(IsoDayOfWeek left, IsoDayOfWeek right, out int days) { days = 0; if (left == IsoDayOfWeek.None || right == IsoDayOfWeek.None) { return(false); } return(TryDaysBetween(DayOfWeekHelper.ToSystemWeek(left), DayOfWeekHelper.ToSystemWeek(right), out days)); }
private static void AddDayOfWeekToHeaderRow(Context context, TableRow headerRow, DayOfWeek dayOfWeek) { var dayTextView = new TextView(context) { Text = DayOfWeekHelper.GetAbbreviated(dayOfWeek) }; dayTextView.SetTypeface(null, TypefaceStyle.Bold); dayTextView.SetPadding(5, 5, 5, 5); headerRow.AddView(dayTextView); }
public void GetDescription(int arrangeUiLcid, string expected, DayOfWeek input) { // Arrange var culture = arrangeUiLcid == 0 ? GlobalizationConstants.EnglishCultureInfo : new CultureInfo(arrangeUiLcid); // Act var actual = DayOfWeekHelper.GetDescription(input, culture); // Assert Assert.Equal(expected, actual); }
public void TryParseDescription(int arrangeUiLcid, bool expected, string input) { // Arrange var culture = arrangeUiLcid == 0 ? GlobalizationConstants.EnglishCultureInfo : new CultureInfo(arrangeUiLcid); // Act var actual = DayOfWeekHelper.TryParseDescription(input, out var dayOfWeek, culture); // Assert Assert.Equal(expected, actual); if (actual) { Assert.Equal(input, DayOfWeekHelper.GetDescription(dayOfWeek, culture)); } }
public void GetDescriptions(int arrangeUiLcid, int expected) { // Arrange CultureInfo culture = null; if (arrangeUiLcid > 0) { culture = new CultureInfo(arrangeUiLcid); } // Act var actual = DayOfWeekHelper.GetDescriptions(culture); // Assert actual.Should() .BeOfType <Dictionary <DayOfWeek, string> >() .And.HaveCount(expected); }
public static async Task SayWeatherforecast(string days) { List <List <FiveDaysForecastResult> > result = DataAccess.DeserializeModuleData(typeof(List <List <FiveDaysForecastResult> >), await DataAccess.GetModuleData(Modules.WEATHERFORECAST)); // Infos zu heutigen Tag löschen if (result.Count > 4) { result.RemoveAt(0); } StringBuilder weatherforecastString = new StringBuilder(); weatherforecastString.Append("Lückenfüller Lückenfüller <break time='300ms'/>"); switch (days) { case "tomorrow": //weatherforecastString.AppendLine($"Morgen wird das Wetter in {result[0][0].City} morgens {result[0][3].Description} mit einer mittleren Temperatur von {Math.Round(result[0].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Morgen wird das Wetter morgens {result[0][3].Description} mit einer mittleren Temperatur von {Math.Round(result[0].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Mittags {result[0][5].Description} mit einer mittleren Temperatur von {Math.Round(result[0].Skip(4).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Abends {result[0][7].Description} mit einer mittleren Temperatur von {Math.Round(result[0].Skip(6).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); break; case "dayaftertomorrow": //weatherforecastString.AppendLine($"Übermorgen wird das Wetter in {result[1][0].City} morgens {result[1][3].Description} mit einer mittleren Temperatur von {Math.Round(result[1].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Übermorgen wird das Wetter morgens {result[1][3].Description} mit einer mittleren Temperatur von {Math.Round(result[1].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Mittags {result[1][5].Description} mit einer mittleren Temperatur von {Math.Round(result[1].Skip(4).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Abends {result[1][7].Description} mit einer mittleren Temperatur von {Math.Round(result[1].Skip(6).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); break; case "monday": case "tuesday": case "wednesday": case "thursday": case "friday": case "saturday": case "sunday": int weekDay = result.IndexOf(result.First(x => x[0].Date.DayOfWeek == DateTimeHelper.GetNextWeekday(DateTime.Now, DayOfWeekHelper.GetDayOfWeek(days)).DayOfWeek)); if (result[weekDay].Count < 4) { weatherforecastString.AppendLine($"Über den {result[weekDay][0].Date:dddd} liegen leider zu wenig Information vor."); break; } //weatherforecastString.AppendLine($"Am {result[weekDay][0].Date:dddd} wird das Wetter in {result[1][0].City} morgens {result[weekDay][3].Description} mit einer mittleren Temperatur von {Math.Round(result[weekDay].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); weatherforecastString.AppendLine($"Am {result[weekDay][0].Date:dddd} wird das Wetter morgens {result[weekDay][3].Description} mit einer mittleren Temperatur von {Math.Round(result[weekDay].Skip(2).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); if (result[weekDay].Count < 6) { weatherforecastString.AppendLine($"Weitere Informationen über den {result[weekDay][0].Date:dddd} liegen nicht vor."); break; } weatherforecastString.AppendLine($"Mittags {result[weekDay][5].Description} mit einer mittleren Temperatur von {Math.Round(result[weekDay].Skip(4).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); if (result[weekDay].Count < 8) { weatherforecastString.AppendLine($"Weitere Informationen über den {result[weekDay][0].Date:dddd} liegen nicht vor."); break; } weatherforecastString.AppendLine($"Abends {result[weekDay][7].Description} mit einer mittleren Temperatur von {Math.Round(result[weekDay].Skip(6).Take(2).Average(innerList => innerList.Temp), 1).ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad."); break; case "all": List <ForecastDays> forecastDays = result.Select(fiveDaysForecastResult => new ForecastDays { City = fiveDaysForecastResult[0].City, CityId = fiveDaysForecastResult[0].CityId, Date = fiveDaysForecastResult[0].Date, Temperature = Math.Round(fiveDaysForecastResult.Average(innerList => innerList.Temp), 1), MinTemp = Math.Round(fiveDaysForecastResult.Min(innerList => innerList.TempMin), 1), MaxTemp = Math.Round(fiveDaysForecastResult.Min(innerList => innerList.TempMax), 1), Icon = fiveDaysForecastResult.GroupBy(x => x.Icon).OrderByDescending(x => x.Count()).First().Key, Description = fiveDaysForecastResult.GroupBy(x => x.Description).OrderByDescending(x => x.Count()).First().Key }).ToList(); //weatherforecastString.AppendLine($"Morgen wird das Wetter in {forecastDays[0].City} überwiegend {forecastDays[0].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[0].Temperature} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Morgen wird das Wetter überwiegend {forecastDays[0].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[0].Temperature} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Übermorgen wird das Wetter überwiegend {forecastDays[1].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[1].Temperature} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Am {forecastDays[2].Date:dddd} wird das Wetter überwiegend {forecastDays[2].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[2].Temperature} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Am {forecastDays[3].Date:dddd} wird das Wetter überwiegend {forecastDays[3].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[3].Temperature} Grad ist zu erwarten."); if (forecastDays.Count >= 5) { weatherforecastString.AppendLine($"Am {forecastDays[4].Date:dddd} wird das Wetter überwiegend {forecastDays[4].Description}. Eine durchschnittliche Tagestemperatur von {forecastDays[4].Temperature} Grad ist zu erwarten."); } break; default: List <ForecastDays> allDays = result.Select(fiveDaysForecastResult => new ForecastDays { City = fiveDaysForecastResult[0].City, CityId = fiveDaysForecastResult[0].CityId, Date = fiveDaysForecastResult[0].Date, Temperature = Math.Round(fiveDaysForecastResult.Average(innerList => innerList.Temp), 1), MinTemp = Math.Round(fiveDaysForecastResult.Min(innerList => innerList.TempMin), 1), MaxTemp = Math.Round(fiveDaysForecastResult.Min(innerList => innerList.TempMax), 1), Icon = fiveDaysForecastResult.GroupBy(x => x.Icon).OrderByDescending(x => x.Count()).First().Key, Description = fiveDaysForecastResult.GroupBy(x => x.Description).OrderByDescending(x => x.Count()).First().Key }).ToList(); //weatherforecastString.AppendLine($"Morgen wird das Wetter in {allDays[0].City} überwiegend {allDays[0].Description}. Eine durchschnittliche Tagestemperatur von {allDays[0].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Morgen wird das Wetter überwiegend {allDays[0].Description}. Eine durchschnittliche Tagestemperatur von {allDays[0].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Übermorgen wird das Wetter überwiegend {allDays[1].Description}. Eine durchschnittliche Tagestemperatur von {allDays[1].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Am {allDays[2].Date:dddd} wird das Wetter überwiegend {allDays[2].Description}. Eine durchschnittliche Tagestemperatur von {allDays[2].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); weatherforecastString.AppendLine($"Am {allDays[3].Date:dddd} wird das Wetter überwiegend {allDays[3].Description}. Eine durchschnittliche Tagestemperatur von {allDays[3].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); if (allDays.Count >= 5) { weatherforecastString.AppendLine($"Am {allDays[4].Date:dddd} wird das Wetter überwiegend {allDays[4].Description}. Eine durchschnittliche Tagestemperatur von {allDays[4].Temperature.ToString(CultureInfo.InvariantCulture).Replace(".", ",")} Grad ist zu erwarten."); } break; } await sayAsync(weatherforecastString.ToString()); }
/// <summary> /// Creates a list of timelines from the provided time bands; only using /// valid sponsorships that meet sales area and time stamp /// </summary> private List <SmoothSponsorshipTimeline> CreateTimelinesFromTimeBands( IEnumerable <SponsoredItem> sponsoredItems) { var smoothTimelines = new List <SmoothSponsorshipTimeline>(); foreach (var currentDate in _dateTimeRange) { foreach (var sponsoredItem in sponsoredItems) { foreach (var sponsorship in sponsoredItem.SponsorshipItems) { DateTimeRange dateRange = (sponsorship.StartDate, sponsorship.EndDate); foreach (var dayPart in sponsorship.DayParts) { AddSmoothTimelineByDate( sponsoredItem, currentDate, dateRange, dayPart); } } } } return(smoothTimelines); bool TimeBandIsOnValidDayOfWeek(string[] daysOfWeek, DateTime date) => DayOfWeekHelper.DateFallsOnDayOfWeek(daysOfWeek, date); void AddSmoothTimelineByDate( SponsoredItem sponsoredItem, DateTime currentDate, DateTimeRange dateRange, SponsoredDayPart dayPart) { if (!(TimeBandIsOnValidDayOfWeek(dayPart.DaysOfWeek, currentDate) && dateRange.Contains(currentDate.Date))) { return; } var start = DateHelper.ConvertBroadcastToStandard(currentDate.Date, dayPart.StartTime); var end = DateHelper.ConvertBroadcastToStandard(currentDate.Date, dayPart.EndTime); List <(string advertiserIdentifier, int restrictionValue)> advertiserExclusivities = GetAdvertiserReferenceAndRestrictionValue( sponsoredItem.AdvertiserExclusivities, sponsoredItem.RestrictionValue ?? 0); List <(string clashExternalReference, int restrictionValue)> clashExclusivities = GetClashReferenceAndRestrictionValue( sponsoredItem.ClashExclusivities, sponsoredItem.RestrictionValue ?? 0); smoothTimelines.Add(new SmoothSponsorshipTimeline() { DateTimeRange = (start, end), AdvertiserIdentifiers = advertiserExclusivities, ClashExternalReferences = clashExclusivities, SponsoredProducts = sponsoredItem.Products, Applicability = sponsoredItem.Applicability ?? SponsorshipApplicability.AllCompetitors, CalculationType = sponsoredItem.CalculationType }); }