#if FRAMEWORK20 using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Globalization; namespace DevComponents.DotNetBar.Schedule { internal static class DateHelper { #region Date/Time Helpers /// /// Returns the date that is 30 minutes before or after input date if input date minute is 0 or 30. Otherwise it returns next increment to 0 or 30. /// /// Date and time. /// Indicates whether to add or subtract minutes. /// New date time. public static DateTime GetNext30Minute(DateTime date, bool forward) { if (date.Minute == 0 || date.Minute == 30) return (date.AddMinutes(forward ? 30 : -30)); return (date.AddMinutes((forward ? 1 : -1) * Math.Abs(30 - date.Minute))); } /// /// Returns date that starts with the day. If passed date is not on the requested date function returns first date with day that is before passed date. /// /// Date to inspect. /// Day of week /// Date that starts on given day of week. public static DateTime GetDateForDayOfWeek(DateTime date, DayOfWeek dayOfWeek) { if (date.DayOfWeek != dayOfWeek) { // Go back to the first day of week while (date.DayOfWeek != dayOfWeek) { date = date.AddDays(-1); } } return (date); } public static DateTime GetEndOfWeek(DateTime date, DayOfWeek lastDayOfWeek) { while (date.DayOfWeek != lastDayOfWeek) date = date.AddDays(1); return (date); } internal static DayOfWeek GetFirstDayOfWeek() { return (ScheduleSettings.GetActiveCulture().DateTimeFormat.FirstDayOfWeek); } internal static DayOfWeek GetLastDayOfWeek() { DayOfWeek firstDay = GetFirstDayOfWeek(); int lastDay = (int)firstDay + 6; if (lastDay > 6) lastDay = lastDay - 7; return (DayOfWeek)lastDay; } /// /// Returns whether two days fall on same month and year. /// /// First date /// Second date /// true if dates are on same month and year public static bool IsSameMonth(DateTime date1, DateTime date2) { return (date1.Year == date2.Year && date1.Month == date2.Month); } public static DayOfWeek GetNextDay(DayOfWeek currentDay) { if ((int)currentDay == 6) return (DayOfWeek)0; return (DayOfWeek)(currentDay + 1); } /// /// Returns true if time periods overlap. /// /// Start of first period. /// End of first period. /// Start of second period. /// End of second period. /// true if periods overlap public static bool TimePeriodsOverlap(DateTime startTime1, DateTime endTime1, DateTime startTime2, DateTime endTime2) { return (startTime1 <= startTime2 && endTime1 > startTime2 || startTime1 >= startTime2 && startTime1 < endTime2); } public static int GetNumberOfWeeks(DateTime startDate, DateTime endDate) { if (startDate == DateTime.MinValue && endDate == DateTime.MinValue) { startDate = DateTime.Today.Date; endDate = startDate.AddMonths(1); } if (startDate == DateTime.MinValue || endDate == DateTime.MinValue || endDate < startDate) { return (0); } endDate = GetEndOfWeek(endDate, DateHelper.GetLastDayOfWeek()); startDate = GetDateForDayOfWeek(startDate, DateHelper.GetFirstDayOfWeek()); return ((int)Math.Max(Math.Ceiling(endDate.Subtract(startDate).TotalDays / 7), 1)); } /// /// Gets the abbreviated month name for /// the given date /// /// Date /// Abbreviated name public static string GetThreeLetterMonth(DateTime date) { CultureInfo ci = ScheduleSettings.GetActiveCulture(); return (ci.DateTimeFormat.GetAbbreviatedMonthName(date.Month)); } /// /// Gets the abbreviated day name for /// the given date /// /// Day of week /// Abbreviated name public static string GetThreeLetterDayOfWeek(DayOfWeek dayOfWeek) { CultureInfo ci = ScheduleSettings.GetActiveCulture(); return (ci.DateTimeFormat.GetAbbreviatedDayName(dayOfWeek)); } #endregion } } #endif