Firt day and last day of week (weeknumber as parameter ans year)

P

peetersb

Hi,

I want ot make functions like this:

int getFirtDayOfWeek(int weeknumber, int year);
int getLastDayOfWeek(int weeknumber, int year);

Firts I calculate the count of weeks like this:

DateTime lastDay = new DateTime(DateTime.Now.Year, 12, 31);
DayOfWeek dayOfWeek = lastDay.DayOfWeek;
CultureInfo myCI = new CultureInfo("nl-BE");
Calendar myCal = myCI.Calendar;
CalendarWeekRule myCWR =
myCI.DateTimeFormat.CalendarWeekRule;
DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
int weeks = myCal.GetWeekOfYear(lastDay, myCWR,
myFirstDOW);

So for this year there are 53 weeks.
Now I want the firts day of week 2 for example ( = 7)
and the last day of week 2 (= 13)
How can I do that?
 
J

Jeroen

Hi,

This is my (untested) guess:

int getFirtDayOfWeek(int weeknumber, int year) {
System.DateTime date = new DateTime(year, 1, 1);
date.AddDays(7 * weeknumber);
return date.Day;
}
int getLastDayOfWeek(int weeknumber, int year){
System.DateTime date = new DateTime(year, 1, 1);
date.AddDays((7 * weeknumber) + 7);
return date.Day;
}

I guess you'd need to add checks for the last week of the year...

-Jeroen
 
A

Arne Vajhøj

I want ot make functions like this:

int getFirtDayOfWeek(int weeknumber, int year);
int getLastDayOfWeek(int weeknumber, int year);

I will assume you want to use ISO 8601 standard for
week numbers (the european way).
So for this year there are 53 weeks.

Not really. 2009 has a week 53, but not 2007 or 2008.
Now I want the firts day of week 2 for example ( = 7)
and the last day of week 2 (= 13)
How can I do that?

See code below for one way of doing it.

Arne

================================================

using System;

namespace E
{
public class Program
{
public static int WeekNumber(int year, int mon, int day)
{
int a = (14 - mon) / 12;
int y = year + 4800 - a;
int m = mon + 12*a - 3;
int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 +
y/400 - 32045;
int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461;
int L = d4 / 1460;
int d1 = ((d4 - L) % 365) + L;
return d1 / 7 + 1;
}
public static DateTime GetFirstDayOfWeek(int weeknumber, int year)
{
DateTime res = new DateTime(year, 1, 1);
res = res.AddDays((weeknumber - 1) * 7 - 4);
while(WeekNumber(res.Year, res.Month, res.Day) != weeknumber
|| res.DayOfWeek != DayOfWeek.Monday)
{
res = res.AddDays(1);
}
return res;
}
public static DateTime GetLastDayOfWeek(int weeknumber, int year)
{
DateTime res = new DateTime(year, 1, 1);
res = res.AddDays((weeknumber - 1) * 7 + 3);
while(WeekNumber(res.Year, res.Month, res.Day) != weeknumber
|| res.DayOfWeek != DayOfWeek.Sunday)
{
res = res.AddDays(1);
}
return res;
}
public static void Main(string[] args)
{
Console.WriteLine(GetFirstDayOfWeek(2, 2008));
Console.WriteLine(GetLastDayOfWeek(2, 2008));
Console.WriteLine(GetFirstDayOfWeek(53, 2009));
Console.WriteLine(GetLastDayOfWeek(53, 2009));
Console.ReadKey();
}
}
}
 
P

peetersb

I want ot make functions like this:
int getFirtDayOfWeek(int weeknumber, int year);
int getLastDayOfWeek(int weeknumber, int year);

I will assume you want to use ISO 8601 standard for
week numbers (the european way).
So for this year there are 53 weeks.

Not really. 2009 has a week 53, but not 2007 or 2008.
Now I want the firts day of week 2 for example ( = 7)
and the last day of week 2 (= 13)
How can I do that?

See code below for one way of doing it.

Arne

================================================

using System;

namespace E
{
public class Program
{
public static int WeekNumber(int year, int mon, int day)
{
int a = (14 - mon) / 12;
int y = year + 4800 - a;
int m = mon + 12*a - 3;
int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 +
y/400 - 32045;
int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461;
int L = d4 / 1460;
int d1 = ((d4 - L) % 365) + L;
return d1 / 7 + 1;
}
public static DateTime GetFirstDayOfWeek(int weeknumber, int year)
{
DateTime res = new DateTime(year, 1, 1);
res = res.AddDays((weeknumber - 1) * 7 - 4);
while(WeekNumber(res.Year, res.Month, res.Day) != weeknumber
|| res.DayOfWeek != DayOfWeek.Monday)
{
res = res.AddDays(1);
}
return res;
}
public static DateTime GetLastDayOfWeek(int weeknumber, int year)
{
DateTime res = new DateTime(year, 1, 1);
res = res.AddDays((weeknumber - 1) * 7 + 3);
while(WeekNumber(res.Year, res.Month, res.Day) != weeknumber
|| res.DayOfWeek != DayOfWeek.Sunday)
{
res = res.AddDays(1);
}
return res;
}
public static void Main(string[] args)
{
Console.WriteLine(GetFirstDayOfWeek(2, 2008));
Console.WriteLine(GetLastDayOfWeek(2, 2008));
Console.WriteLine(GetFirstDayOfWeek(53, 2009));
Console.WriteLine(GetLastDayOfWeek(53, 2009));
Console.ReadKey();
}
}

}

Thanks a lot!!!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top