Feedback

Datum des Montags einer Woche berechnen

Sprache: C#

Dieses Snippet berechnet das Datum des Montags in einer Kalenderwoche im angegebenen Jahr [b]Hinweis[/b]: um bspws den Sonntag der besagten Woche zu erhalten müssen nur 6 Tage auf das Datum aufgerechnet werden: [code]DateTime dt = GetMondayDateOfWeek(49, 2012).AddDays(6);[/code]
//using System.Globalization;
private DateTime GetMondayDateOfWeek(int week, int year)
{
	int i = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(year, 1, 1), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

	if (i == 1) {
		return CultureInfo.CurrentCulture.Calendar.AddDays(new DateTime(year, 1, 1), ((week - 1) * 7 - GetDayCountFromMonday(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1))) + 1));
	} else {
		int x = Convert.ToInt32(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1)));
		return CultureInfo.CurrentCulture.Calendar.AddDays(new DateTime(year, 1, 1), ((week - 1) * 7 + (7 - GetDayCountFromMonday(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1)))) + 1));
	}
}

//Gibt den Wochentag als Zahl zurück, Montag entspricht 1
private int GetDayCountFromMonday(DayOfWeek dow)
{
	switch (dow) {
		case DayOfWeek.Monday:
			return 1;
		case DayOfWeek.Tuesday:
			return 2;
		case DayOfWeek.Wednesday:
			return 3;
		case DayOfWeek.Thursday:
			return 4;
		case DayOfWeek.Friday:
			return 5;
		case DayOfWeek.Saturday:
			return 6;
		default:
			//Sunday
			return 7;
	}
}
//using System.Globalization;
private DateTime GetMondayDateOfWeek(int week, int year)
{
	int i = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(new DateTime(year, 1, 1), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

	if (i == 1) {
		return CultureInfo.CurrentCulture.Calendar.AddDays(new DateTime(year, 1, 1), ((week - 1) * 7 - GetDayCountFromMonday(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1))) + 1));
	} else {
		int x = Convert.ToInt32(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1)));
		return CultureInfo.CurrentCulture.Calendar.AddDays(new DateTime(year, 1, 1), ((week - 1) * 7 + (7 - GetDayCountFromMonday(CultureInfo.CurrentCulture.Calendar.GetDayOfWeek(new DateTime(year, 1, 1)))) + 1));
	}
}

//Gibt den Wochentag als Zahl zurück, Montag entspricht 1
private int GetDayCountFromMonday(DayOfWeek dow)
{
	switch (dow) {
		case DayOfWeek.Monday:
			return 1;
		case DayOfWeek.Tuesday:
			return 2;
		case DayOfWeek.Wednesday:
			return 3;
		case DayOfWeek.Thursday:
			return 4;
		case DayOfWeek.Friday:
			return 5;
		case DayOfWeek.Saturday:
			return 6;
		default:
			//Sunday
			return 7;
	}
}