public void Render(Graphics g, RendererParameters parameters) { if (parameters.IsMouseOver && !parameters.IsPressed) { // mouse over highlight g.Clear(BgHighlightColor); } using (var bmp = new Bitmap(parameters.WindowSize.Width, parameters.WindowSize.Height, PixelFormat.Format32bppArgb)) { // CLeartype does not work with transparent backgrounds // -> draw it on solid black and convert it to transparent afterwards // decide on Black/WHite depending on brightness of FontColor? Color chromaColor = FontColor == Color.Black ? Color.White : Color.Black; Color fontdrawColor = FontColor == Color.Black ? Color.Black : Color.White; using (var gbmp = Graphics.FromImage(bmp)) { gbmp.Clear(chromaColor); gbmp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; gbmp.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; gbmp.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; var cWeek = CalendarWeek.GetCalendarWeek(DateTime.Today, WeekRule); String text = DisplayFormatString.Replace("%week%", $"{cWeek.Week}").Replace("%year%", $"{cWeek.Year}"); int padding = 3; int linePadding = 2; int availableHeight = parameters.WindowSize.Height - 2 * padding; String[] lines = text.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); // get maximum number of lines which can be displayed if (lines.Length > 0) { int lineHeight = (int)gbmp.MeasureString("W", Font).Height; int maxLines = availableHeight / lineHeight; int linesToDraw = Math.Min(maxLines, lines.Length); int heightPerLine = availableHeight / linesToDraw; using (StringFormat sf = StringFormat.GenericTypographic) using (var textBrush = new SolidBrush(fontdrawColor)) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; for (int i = 0; i < linesToDraw; i++) { var windowRect = new Rectangle(0, padding + i * (heightPerLine + linePadding), parameters.WindowSize.Width, heightPerLine); gbmp.DrawString(lines[i], Font, textBrush, windowRect, sf); } } } } RemoveChroma(bmp, FontColor, chromaColor); g.DrawImage(bmp, 0, 0); } }
/* Methode zur Ermittlung des Startdatums einer internationalen Kalenderwoche */ public static System.DateTime GetCalendarWeekStartDate( int calendarWeek, int year) { // Basisdatum (1.1. des angegebenen Jahres) ermitteln System.DateTime startDate = new System.DateTime( year, 1, 1); // Das Datum des ersten Wochentags dieser Woche ermitteln while (startDate.DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) { startDate = startDate.AddDays(-1); } // Die Kalenderwoche ermitteln: Wenn es sich um die Woche 1 handelt, // ist dies das Basisdatum für die Berechnung, wenn nicht, müssen // sieben Tage aufaddiert werden CalendarWeek cw = GetCalendarWeek2(startDate); if (cw.Week != 1) { startDate = startDate.AddDays(7); } // Das Ergebnisdatum ermitteln return(startDate.AddDays((calendarWeek - 1) * 7)); }
public void ReturnCorrectdaysForIsoWeek() { var dates = TestDates(); foreach (var dateTime in dates) { var isoWeek = new CalendarWeek(dateTime.Value.Item1, dateTime.Value.Item2, dateTime.Key.Month); var daysOfWeek = isoWeek.Days; var targDay = dateTime.Key; Assert.Contains(targDay, daysOfWeek.Select(d => d.Date)); //Assert.Equal(dateTime.Value.Item2, dateTime.Key.GetIso8601WeekOfYear()); //Assert.Equal(dateTime.Value.Item1, dateTime.Key.GetIso8601YearOfYear()); } }
// GET: /Week/year/month public ActionResult Index(int? year, int? week, int? targetMonth) { int yearnumber = year ?? DateTime.Now.Year; int weekNumber = week ?? 1; int monthNumber = targetMonth ?? DateTime.Now.Month; var calendarWeek = new CalendarWeek(yearnumber, weekNumber, monthNumber); var eventBookings = RavenSession.Query<CalendarBooking>().Where(c => c.StartTime > calendarWeek.Start && c.StartTime < calendarWeek.End).ToList(); var mappedBookings = AutoMapper.Mapper.Map<List<CalendarBooking>, List<EventViewModel>>(eventBookings); foreach (var calendarDay in calendarWeek.Days) { calendarDay.LoadBookings(mappedBookings); } return PartialView(calendarWeek); }
/* Methode zur Ermittlung der Anzahl der Kalenderwochen eines Jahres */ public static int GetCalendarWeekCount(int year) { // Kalenderwoche des 31.12. des Jahres ermitteln System.DateTime baseDate = new System.DateTime(year, 12, 31); CalendarWeek calendarWeek = GetCalendarWeek2(baseDate); // Wenn dieser Tag in die Woche 1 des neuen Jahres fällt, die Kalenderwoche // des um eine Woche reduzierten Datums ermitteln if (calendarWeek.Week == 1) { return(GetCalendarWeek2(baseDate.AddDays(-7)).Week); } // Ergebnis zurückgeben return(calendarWeek.Week); }
public List <CalendarWeek> GetWeeksOfMonth(int year, int monthNumber) { List <CalendarWeek> weeks = new List <CalendarWeek>(); int daysInMonth = GetDaysInMonth(year, monthNumber); CalendarWeek tmpWeek = null; int weekOfMonth = 0; for (int i = 1; i <= daysInMonth; i++) { if (tmpWeek == null) { tmpWeek = new CalendarWeek(); tmpWeek.WeekOfMonth = weekOfMonth; } int dayOfWeek = (int)new DateTime(year, monthNumber, i).DayOfWeek; int arrayIndexOfWeekDay = dayOfWeek - 1; if (arrayIndexOfWeekDay < 0) { arrayIndexOfWeekDay = this.lastDayOfWeekSundayNumber; } tmpWeek.DaysOfWeek[arrayIndexOfWeekDay] = new CalendarDay() { DayOfMonth = i }; if (arrayIndexOfWeekDay == this.lastDayOfWeekSundayNumber) { weeks.Add(tmpWeek); tmpWeek = null; weekOfMonth++; } } if (tmpWeek != null) { weeks.Add(tmpWeek); } return(weeks); }
private async Task <string> GetWeekIdentifierAsync(CalendarWeek date, bool createIfNotExists) { if (createIfNotExists) { var query = _graphClient .Cypher .Merge("(a:Week { week: {week}, year: {year} })") .OnCreate() .Set("a.uniqueId = {id}, a.week = {week}, a.year = {year}") .WithParams( new { id = Guid.NewGuid().ToString(), week = date.WeekNumber, year = date.Date.Year }) .Return <string>("a.uniqueId"); var results = await query.ResultsAsync.ConfigureAwait(false); return(results.FirstOrDefault()); } else { var query = _graphClient .Cypher .Match("(a:Week { week: {week}, year: {year} })") .WithParams( new { week = date.WeekNumber, year = date.Date.Year }) .Return <string>("a.uniqueId"); var results = await query.ResultsAsync.ConfigureAwait(false); return(results.FirstOrDefault()); } }
public async Task <TimeTreeReference> Get(DateTimeOffset date) { // Create year (link if possible) var yearId = await GetYearIdentifierAsync(date, true).ConfigureAwait(false); var prevYearId = await GetYearIdentifierAsync(date.AddYears(-1), false).ConfigureAwait(false); var nextYearId = await GetYearIdentifierAsync(date.AddYears(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Year", prevYearId, "PREV", "Year", yearId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Year", yearId, "PREV", "Year", nextYearId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Years) { return(new TimeTreeReference("Year", yearId)); } // Create quarter var quarter = new CalendarQuarter(date); var quarterId = await GetQuarterIdentifierAsync(quarter, true).ConfigureAwait(false); var prevQuarterId = await GetQuarterIdentifierAsync(quarter.Previous, false).ConfigureAwait(false); var nextQuarterId = await GetQuarterIdentifierAsync(quarter.Next, false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Quarter", prevQuarterId, "PREV", "Quarter", quarterId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Quarter", quarterId, "PREV", "Quarter", nextQuarterId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_QUARTER", "Year", yearId, "PARENT_YEAR", "Quarter", quarterId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Quarters) { return(new TimeTreeReference("Quarter", quarterId)); } // Create month var monthId = await GetMonthIdentifierAsync(date, true).ConfigureAwait(false); var prevMonthId = await GetMonthIdentifierAsync(date.AddMonths(-1), false).ConfigureAwait(false); var nextMonthId = await GetMonthIdentifierAsync(date.AddMonths(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Month", prevMonthId, "PREV", "Month", monthId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Month", monthId, "PREV", "Month", nextMonthId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_MONTH", "Year", yearId, "PARENT_YEAR", "Month", monthId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_MONTH", "Quarter", quarterId, "PARENT_QUARTER", "Month", monthId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Months) { return(new TimeTreeReference("Month", monthId)); } // Create week var week = new CalendarWeek(date, _configuration.FirstDayOfWeek); var weekId = await GetWeekIdentifierAsync(week, true).ConfigureAwait(false); var prevWeekId = await GetWeekIdentifierAsync(week.Previous, false).ConfigureAwait(false); var nextWeekId = await GetWeekIdentifierAsync(week.Next, false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Week", prevWeekId, "PREV", "Week", weekId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Week", weekId, "PREV", "Week", nextWeekId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_WEEK", "Year", yearId, "PARENT_YEAR", "Week", weekId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_WEEK", "Quarter", quarterId, "PARENT_QUARTER", "Week", weekId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Weeks) { return(new TimeTreeReference("Week", weekId)); } // Create day var dayId = await GetDayIdentifierAsync(date, true).ConfigureAwait(false); var prevDayId = await GetDayIdentifierAsync(date.AddDays(-1), false).ConfigureAwait(false); var nextDayId = await GetDayIdentifierAsync(date.AddDays(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Day", prevDayId, "PREV", "Day", weekId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Day", weekId, "PREV", "Day", nextDayId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_DAY", "Month", quarterId, "PARENT_MONTH", "Day", dayId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_DAY", "Week", weekId, "PARENT_WEEK", "Day", dayId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Days) { return(new TimeTreeReference("Day", dayId)); } // Create hour var hourId = await GetHourIdentifierAsync(date, true).ConfigureAwait(false); var prevHourId = await GetHourIdentifierAsync(date.AddHours(-1), false).ConfigureAwait(false); var nextHourId = await GetHourIdentifierAsync(date.AddHours(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Hour", prevHourId, "PREV", "Hour", hourId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Hour", hourId, "PREV", "Hour", nextHourId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_HOUR", "Day", dayId, "PARENT_DAY", "Hour", hourId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Hours) { return(new TimeTreeReference("Hour", hourId)); } // Create minute var minuteId = await GetMinuteIdentifierAsync(date, true).ConfigureAwait(false); var prevMinuteId = await GetMinuteIdentifierAsync(date.AddMinutes(-1), false).ConfigureAwait(false); var nextMinuteId = await GetMinuteIdentifierAsync(date.AddMinutes(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Minute", prevMinuteId, "PREV", "Minute", minuteId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Minute", minuteId, "PREV", "Minute", nextMinuteId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_MINUTE", "Minute", hourId, "PARENT_HOUR", "Hour", minuteId) .ConfigureAwait(false); if (_configuration.Specificity == TimeTreeSpecificity.Minutes) { return(new TimeTreeReference("Minute", minuteId)); } // Create second var secondId = await GetSecondIdentifierAsync(date, true).ConfigureAwait(false); var prevSecondId = await GetSecondIdentifierAsync(date.AddSeconds(-1), false).ConfigureAwait(false); var nextSecondId = await GetSecondIdentifierAsync(date.AddSeconds(1), false).ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Second", prevSecondId, "PREV", "Second", secondId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "NEXT", "Second", secondId, "PREV", "Second", nextSecondId) .ConfigureAwait(false); await CreateLinkIfNotExistsAsync( "CHILD_SECOND", "Second", minuteId, "PARENT_MINUTE", "Minute", secondId) .ConfigureAwait(false); return(new TimeTreeReference("Second", secondId)); }