3

I need help finding the second Wednesday of the year. Here is what I have done, but it doesn't seem to work.

DateTime baseDay = new DateTime(DateTime.Now.Year, 1, 5);
int secondWed = 5 + ((12 - (int)baseDay.DayOfWeek) % 7);
DateTime fullDate = new DateTime(DateTime.Now.Year, 1, secondWed);
Richard Ev
  • 52,939
  • 59
  • 191
  • 278
HELP_ME
  • 2,619
  • 3
  • 24
  • 31

5 Answers5

12

Try this method instead:

DateTime dt = new DateTime(DateTime.Now.Year, 1, 8); //get second week of the year
while(dt.DayOfWeek != DayOfWeek.Wednesday) //loop until we find the next Wednesday
    dt = dt.AddDays(1);
Connell
  • 13,925
  • 11
  • 59
  • 92
2

May be this helps

    DateTime startDate = new DateTime(DateTime.Now.Year, 1, 1);
    int c = (int)startDate.DayOfWeek;
    int n = (int)DayOfWeek.Wednesday;
    int weekcount=2;
    int diff = (7 - c + n);
    int days= (diff > 7) ? diff % 7 : diff;
    startDate.AddDays((weekcount-1)*7+ days );
Amritpal Singh
  • 1,765
  • 1
  • 13
  • 20
  • couple of bugs in the above. what is d? the result of .AddDays is thrown away. even if I change 'd' to 'n' I don't get the right answer – Corey Kosak Nov 10 '11 at 13:40
2

Based on the very good answer by Mark Ransom to How to find the 3rd Friday in a month with C#?. There is no looping here.

var year = 2011;
var firstDayOfMonth = new DateTime(year, 1, 1);
var daysUntilNextWednesday = DayOfWeek.Wednesday - firstDayOfMonth.DayOfWeek;
if (daysUntilNextWednesday < 0)
  daysUntilNextWednesday += 7;
var firstWednesdayOfMonth = firstDayOfMonth.AddDays(daysUntilNextWednesday);
var secondWednesdayOfMonth = firstWednesdayOfMonth.AddDays(7);

You can merge the last two lines into one for slightly better performance.

Community
  • 1
  • 1
Martin Liversage
  • 104,481
  • 22
  • 209
  • 256
1

Something this simple would also work...

int weekNumber = 2;
DateTime seekingDate = new DateTime(DateTime.Now.Year, 1, 1);
while (seekingDate.DayOfWeek != DayOfWeek.Wednesday)
    seekingDate = seekingDate.AddDays(1);

seekingDate.AddDays(7 * (weekNumber - 1));

Of course, I would use variable for the weekday and the week number.

Tipx
  • 7,367
  • 4
  • 37
  • 59
1

I believe this would also work:

var date = new DateTime(DateTime.Now.Year,1,1);
if(date.DayOfWeek > DayOfWeek.Tuesday)
    date = date.AddDays(9 - (int)date.DayOfWeek);
else if(date.DayOfWeek < DayOfWeek.Tuesday)
    date = date.AddDays(2 - (int)date.DayOfWeek);
date = date.AddDays(7);
Morten Nilsen
  • 621
  • 7
  • 18