コード例 #1
0
 /// <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)));
 }
コード例 #2
0
ファイル: User.cs プロジェクト: zjklee/jellyfin
        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);
        }
コード例 #3
0
 /// <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));
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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));
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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());
        }
コード例 #9
0
        /// <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
                });
            }