2009-11-10 3 views
16

Мне нужно найти способ найти дату (DD/MM/YYYY) в понедельник в течение любой недели, когда мы будем.Поиск даты понедельника в неделю с VB.NET

Например, на этой неделе, в понедельник, будет 09/11/2009, и если бы это была следующая неделя, это было бы 16/11/2009.

Мне удалось получить где-то в виде кода, но все, что у меня было, было «невозможно преобразовать в Integer». Я использовал Date.Today и AddDays().

Спасибо за любую помощь. :)

+0

Тот же вопрос, что и http://stackoverflow.com/questions/1706589/datetime-question-in-vb-net ?? –

+0

Принять ответ. –

ответ

5

DateTime.DayOfWeek - это перечисление, указывающее, в какой день указанная дата. В понедельник 1, вы можете найти в понедельник текущей недели, используя следующий код:

Dim monday As DateTime = Today.AddDays((Today.DayOfWeek - DayOfWeek.Monday) * -1) 
2
=Format(DateAdd("d", (-1 * WeekDay(Date.Today()) + 2), Date.Today()), "dd/MM/yyyy") 
34

Если воскресенье первый день недели, вы можете просто сделать это:

Dim today As Date = Date.Today 
Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 

Если понедельник первый день недели:

Dim today As Date = Date.Today 
Dim dayIndex As Integer = today.DayOfWeek 
If dayIndex < DayOfWeek.Monday Then 
    dayIndex += 7 'Monday is first day of week, no day of week should have a smaller index 
End If 
Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 
+0

Работает отлично, приветствия. :) – Willis

+0

Вы можете задать свой ответ так, как принято тогда :-) Также, если вы хотите что-то нам прокомментировать (например, ваше сообщение благодарности), вы должны добавить комментарий к своему вопросу или изменить свой вопрос вместо добавления ответа. Также, приветствуем переполнение стека! –

+0

Действительно ли это работает, если день воскресенья?Когда я попробовал, я получил дату ** следующего ** в понедельник, а не в предыдущий понедельник. –

1

простой метод должен получить, что вы хотите:

private static DateTime GetMondayForWeek(DateTime inputDate) 
    { 
     int daysFromMonday = inputDate.DayOfWeek - DayOfWeek.Monday; 
     return inputDate.AddDays(-daysFromMonday); 
    } 

Вы также можете продлить его на любой день, который вы хотите, а также:

private static DateTime GetDayForWeek(DateTime inputDate, DayOfWeek inputDay) 
    { 
     int daysAway = inputDate.DayOfWeek - inputDay; 
     return inputDate.AddDays(-daysAway); 
    } 

Для вызова первого примера просто использовать что-то вроде:

DateTime mondayDate = GetMondayForWeek(new DateTime(2009, 11, 15)); 
Console.WriteLine(mondayDate); 
+0

Кормление C# новому парню? (см. теги) –

+0

Ahhhh, не видел тег VB. Я обычно задаю вопросы, а не отвечаю им так мало нового на всю сцену ответа. К сожалению, у меня даже нет VB на моей машине. –

0

Я только что сделал это в проекте, над которым я работаю - я обещаю, это правильно. Это метод, который возвращает n-й понедельник после указанной даты. Если данная дата является понедельником, она возвращается в следующий понедельник.

Public Function GetSubsequentMonday(ByVal startDate As DateTime, ByVal subsequentWeeks As Integer) As DateTime 
    Dim dayOfWeek As Integer = CInt(startDate.DayOfWeek) 
    Dim daysUntilMonday As Integer = (Math.Sign(dayOfWeek) * (7 - dayOfWeek)) + 1 
    'number of days until the next Monday 
    Return startDate.AddDays(CDbl((daysUntilMonday + (7 * (subsequentWeeks - 1))))) 
End Function 
0

Исходя из моих комментариев к ответу Meta-Найт, вот короткая функция, которая делает поправку я упоминаю в комментариях:

Public Function GetFirstOfLastWeek() As DateTime 
Dim today As DateTime, daysSinceMonday As Integer 
    today = DateTime.Today 
    daysSinceMonday = today.DayOfWeek - DayOfWeek.Monday 
    If daysSinceMonday < 0 Then 
     daysSinceMonday += 7 
    End If 
    Return today.AddDays(-daysSinceMonday) 
End Function 
0

И если ваша неделя начинается с понедельника, то вы можете использовать что-то вроде этого:

DateTime mondayDate = DateTime.Now.AddDays(((DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek) - 1)*-1); 

DateTime sundayDate = DateTime.Now.AddDays(7 - (DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek)); 
1

Другой подход, если понедельник является первый день, это:

Dim today As Date = Date.Today 
       Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
       Dim monday As Date = today.AddDays(-dayDiff) 

       dayDiff = DayOfWeek.Saturday - today.DayOfWeek + 1 
       Dim sunday As Date = today.AddDays(dayDiff) 
Смежные вопросы