} // GetStartOfWeek // ---------------------------------------------------------------------- public static void GetWeekOfYear(DateTime moment, CultureInfo culture, YearWeekType yearWeekType, out int year, out int weekOfYear) { GetWeekOfYear(moment, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType, out year, out weekOfYear); } // GetWeekOfYear
} // New // ---------------------------------------------------------------------- public static TimeCalendar New(CultureInfo culture, YearMonth yearBaseMonth, YearWeekType yearWeekType) { return(new TimeCalendar(new TimeCalendarConfig { Culture = culture, YearBaseMonth = yearBaseMonth, YearWeekType = yearWeekType })); } // New
} // GetWeeksOfYear // ---------------------------------------------------------------------- public static DateTime GetStartOfYearWeek(int year, int weekOfYear, CultureInfo culture, YearWeekType yearWeekType) { if (culture == null) { throw new ArgumentNullException("culture"); } return(GetStartOfYearWeek(year, weekOfYear, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType)); } // GetStartOfYearWeek
} // QueryWeek // ---------------------------------------------------------------------- public bool QueryYearWeekType() { int?weekType = ConsoleTool.QueryNumber("Week type (0..1) [enter=" + (int)YearWeekType + "/" + YearWeekType + "]: ", (int)YearWeekType, 0, 2); if (!weekType.HasValue) { return(false); } YearWeekType = (YearWeekType)weekType.Value; return(true); } // QueryYearWeekType
// ---------------------------------------------------------------------- public TimeCalendar( TimeCalendarConfig config ) { if ( config.StartOffset < TimeSpan.Zero ) { throw new ArgumentOutOfRangeException( "config" ); } if ( config.EndOffset > TimeSpan.Zero ) { throw new ArgumentOutOfRangeException( "config" ); } culture = config.Culture ?? Thread.CurrentThread.CurrentCulture; yearType = config.YearType.HasValue ? config.YearType.Value : YearType.SystemYear; startOffset = config.StartOffset.HasValue ? config.StartOffset.Value : DefaultStartOffset; endOffset = config.EndOffset.HasValue ? config.EndOffset.Value : DefaultEndOffset; yearBaseMonth = config.YearBaseMonth.HasValue ? config.YearBaseMonth.Value : TimeSpec.CalendarYearStartMonth; yearWeekType = config.YearWeekType.HasValue ? config.YearWeekType.Value : YearWeekType.Calendar; dayNameType = config.DayNameType.HasValue ? config.DayNameType.Value : CalendarNameType.Full; monthNameType = config.MonthNameType.HasValue ? config.MonthNameType.Value : CalendarNameType.Full; }
// ---------------------------------------------------------------------- public static TimeCalendar New( CultureInfo culture, YearMonth yearBaseMonth, YearWeekType yearWeekType ) { return new TimeCalendar( new TimeCalendarConfig { Culture = culture, YearBaseMonth = yearBaseMonth, YearWeekType = yearWeekType } ); }
} // GetStartOfYearWeek // ---------------------------------------------------------------------- public static DateTime GetStartOfYearWeek(int year, int weekOfYear, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType) { if (culture == null) { throw new ArgumentNullException("culture"); } if (weekOfYear < 1) { throw new ArgumentOutOfRangeException("weekOfYear"); } DateTime dateTime = new DateTime(year, 1, 1).AddDays(weekOfYear * TimeSpec.DaysPerWeek); int currentYear; int currentWeek; GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); // get last week day of the week DayOfWeek lastDayOfWeek = (DayOfWeek)(((int)firstDayOfWeek + TimeSpec.DaysPerWeek - 1) % TimeSpec.DaysPerWeek); // end date of week while (currentWeek != weekOfYear) { dateTime = dateTime.AddDays(-1); GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); } // end of previous week => keep on going until got last week day while (currentWeek == weekOfYear || dateTime.DayOfWeek != lastDayOfWeek) { dateTime = dateTime.AddDays(-1); GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); } return(dateTime.AddDays(1)); } // GetStartOfYearWeek
// ---------------------------------------------------------------------- public bool QueryYearWeekType() { int? weekType = ConsoleTool.QueryNumber( "Week type (0..1) [enter=" + (int)YearWeekType + "/" + YearWeekType + "]: ", (int)YearWeekType, 0, 2 ); if ( !weekType.HasValue ) { return false; } YearWeekType = (YearWeekType)weekType.Value; return true; }
} // GetStartOfYearWeek // ---------------------------------------------------------------------- public static DateTime GetStartOfYearWeek(int year, int weekOfYear, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType) { if (culture == null) { throw new ArgumentNullException("culture"); } if (weekOfYear < 1) { throw new ArgumentOutOfRangeException(nameof(weekOfYear)); } DateTime dateTime = new DateTime(year, 1, 1).AddDays(weekOfYear * TimeSpec.DaysPerWeek); int currentYear; int currentWeek; GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); // end date of week while (currentWeek != weekOfYear) { dateTime = dateTime.AddDays(-1); GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); } // end of previous week while (currentWeek == weekOfYear) { dateTime = dateTime.AddDays(-1); GetWeekOfYear(dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); } return(dateTime.AddDays(1)); } // GetStartOfYearWeek
} // GetWeekOfYear // ---------------------------------------------------------------------- public static int GetWeeksOfYear(int year, CultureInfo culture, YearWeekType yearWeekType) { return(GetWeeksOfYear(year, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType)); } // GetWeeksOfYear
} // GetWeeksOfYear // ---------------------------------------------------------------------- public static int GetWeeksOfYear(int year, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType) { if (culture == null) { throw new ArgumentNullException(nameof(culture)); } int currentYear; int currentWeek; DateTime currentDay = new DateTime(year, 12, 31); GetWeekOfYear(currentDay, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); while (currentYear != year) { currentDay = currentDay.AddDays(-1); GetWeekOfYear(currentDay, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek); } return(currentWeek); } // GetWeeksOfYear
// ---------------------------------------------------------------------- public static bool IsSameWeek( DateTime left, DateTime right, CultureInfo culture, YearWeekType weekType ) { return IsSameWeek( left, right, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, weekType ); }
} // GetWeekOfYear // ---------------------------------------------------------------------- public static void GetWeekOfYear(DateTime moment, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType, out int year, out int weekOfYear) { if (culture == null) { throw new ArgumentNullException("culture"); } if (yearWeekType == YearWeekType.Iso8601 && weekRule == CalendarWeekRule.FirstFourDayWeek && firstDayOfWeek == DayOfWeek.Monday) { DayOfWeek day = culture.Calendar.GetDayOfWeek(moment); if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) { moment = moment.AddDays(3); } } weekOfYear = culture.Calendar.GetWeekOfYear(moment, weekRule, firstDayOfWeek); year = moment.Year; if (weekOfYear >= 52 && moment.Month < 12) { year--; } } // GetWeekOfYear
// ---------------------------------------------------------------------- public static int GetWeeksOfYear( int year, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType) { if ( culture == null ) { throw new ArgumentNullException( "culture" ); } int currentYear; int currentWeek; DateTime currentDay = new DateTime( year, 12, 31 ); GetWeekOfYear( currentDay, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek ); while ( currentYear != year ) { currentDay = currentDay.AddDays( -1 ); GetWeekOfYear( currentDay, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek ); } return currentWeek; }
} // IsSameMonth #endregion #region Week // ---------------------------------------------------------------------- public static bool IsSameWeek(DateTime left, DateTime right, CultureInfo culture, YearWeekType weekType) { return(IsSameWeek(left, right, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, weekType)); } // IsSameWeek
// ---------------------------------------------------------------------- public static int GetWeeksOfYear( int year, CultureInfo culture, YearWeekType yearWeekType ) { return GetWeeksOfYear( year, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType ); }
// ---------------------------------------------------------------------- public static void GetWeekOfYear( DateTime moment, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType, out int year, out int weekOfYear) { if ( culture == null ) { throw new ArgumentNullException( "culture" ); } if ( yearWeekType == YearWeekType.Iso8601 && weekRule == CalendarWeekRule.FirstFourDayWeek && firstDayOfWeek == DayOfWeek.Monday ) { // see http://blogs.msdn.com/b/shawnste/archive/2006/01/24/517178.aspx DayOfWeek day = culture.Calendar.GetDayOfWeek( moment ); if ( day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday ) { moment = moment.AddDays( 3 ); } } weekOfYear = culture.Calendar.GetWeekOfYear( moment, weekRule, firstDayOfWeek ); year = moment.Year; if ( weekOfYear >= 52 && moment.Month < 12 ) { year--; } }
// ---------------------------------------------------------------------- public static void GetWeekOfYear( DateTime moment, CultureInfo culture, YearWeekType yearWeekType, out int year, out int weekOfYear) { GetWeekOfYear( moment, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType, out year, out weekOfYear ); }
// ---------------------------------------------------------------------- public static DateTime GetStartOfYearWeek( int year, int weekOfYear, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType) { if ( culture == null ) { throw new ArgumentNullException( "culture" ); } if ( weekOfYear < 1 ) { throw new ArgumentOutOfRangeException( "weekOfYear" ); } DateTime dateTime = new DateTime( year, 1, 1 ).AddDays( weekOfYear * TimeSpec.DaysPerWeek ); int currentYear; int currentWeek; GetWeekOfYear( dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek ); // end date of week while ( currentWeek != weekOfYear ) { dateTime = dateTime.AddDays( -1 ); GetWeekOfYear( dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek ); } // end of previous week while ( currentWeek == weekOfYear ) { dateTime = dateTime.AddDays( -1 ); GetWeekOfYear( dateTime, culture, weekRule, firstDayOfWeek, yearWeekType, out currentYear, out currentWeek ); } return dateTime.AddDays( 1 ); }
// ---------------------------------------------------------------------- public static DateTime GetStartOfYearWeek( int year, int weekOfYear, CultureInfo culture, YearWeekType yearWeekType ) { if ( culture == null ) { throw new ArgumentNullException( "culture" ); } return GetStartOfYearWeek( year, weekOfYear, culture, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek, yearWeekType ); }
} // IsSameWeek // ---------------------------------------------------------------------- public static bool IsSameWeek(DateTime left, DateTime right, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType weekType) { if (culture == null) { throw new ArgumentNullException("culture"); } // left int leftWeekOfYear; int leftYear; TimeTool.GetWeekOfYear(left, culture, weekRule, firstDayOfWeek, weekType, out leftYear, out leftWeekOfYear); // rught int rightWeekOfYear; int rightYear; TimeTool.GetWeekOfYear(right, culture, weekRule, firstDayOfWeek, weekType, out rightYear, out rightWeekOfYear); return(leftYear == rightYear && leftWeekOfYear == rightWeekOfYear); } // IsSameWeek
} // GetWeekOfYear // ---------------------------------------------------------------------- public static void GetWeekOfYear(DateTime moment, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType yearWeekType, out int year, out int weekOfYear) { if (culture == null) { throw new ArgumentNullException(nameof(culture)); } if (yearWeekType == YearWeekType.Iso8601 && weekRule == CalendarWeekRule.FirstFourDayWeek) { // see http://blogs.msdn.com/b/shawnste/archive/2006/01/24/517178.aspx DayOfWeek day = culture.Calendar.GetDayOfWeek(moment); if (day >= firstDayOfWeek && (int)day <= (int)(firstDayOfWeek + 2) % 7) { moment = moment.AddDays(3); } } weekOfYear = culture.Calendar.GetWeekOfYear(moment, weekRule, firstDayOfWeek); year = moment.Year; if (weekOfYear >= 52 && moment.Month < 12) { year--; } } // GetWeekOfYear
// ---------------------------------------------------------------------- public static bool IsSameWeek( DateTime left, DateTime right, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, YearWeekType weekType ) { if ( culture == null ) { throw new ArgumentNullException( "culture" ); } // left int leftWeekOfYear; int leftYear; TimeTool.GetWeekOfYear( left, culture, weekRule, firstDayOfWeek, weekType, out leftYear, out leftWeekOfYear ); // rught int rightWeekOfYear; int rightYear; TimeTool.GetWeekOfYear( right, culture, weekRule, firstDayOfWeek, weekType, out rightYear, out rightWeekOfYear ); return leftYear == rightYear && leftWeekOfYear == rightWeekOfYear; }
// ---------------------------------------------------------------------- public static void GetWeekOfYear(DateTime moment, YearWeekType yearWeekType, out int year, out int weekOfYear) { GetWeekOfYear(moment, System.Threading.Thread.CurrentThread.CurrentCulture, yearWeekType, out year, out weekOfYear); } // GetWeekOfYear