2015-01-12 2 views
0

나는 현재 주에 월요일의 날짜를 얻으려고합니다. 가까운 것이 맞습니까?이전 월요일에 입주하기

Dim MondayOfCurrentWeek As Date = Date.Today - Date.Today.DayOfWeek + 1 

지금까지 내가 그것을 이해로 AyOfWeek 인덱스는 다음과 같습니다

1 = Monday 
2 = Tuesday 
3 = Wednesday 
4 = Thursday 
5 = Friday 
6 = Saturday 
0 = Sunday 

예를 들어 날짜 오늘은 목요일 인 경우 그러므로 내가 얻을 것 :

Dim MondayOfCurrentWeek As Date = Date - 4 + 1 

것은 동일 할 것이다

Date - 3 

과 내게 맞는 것 같습니다.

아니면 완전히 벗어 났습니까? 하지만, 같은 확대됨에 아마 동안 산술 기반의 오류를 방지하지

+0

그것은 C#을, 그러나 A [반 중복이있다 여기] (http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week), 당신이 사용할 수있는 좋은 기능을 가지고있다. 모든 요일. –

+0

사물의 다른 측면에서, 향후 릴리스에서 열거 형을 변경할 수는 없지만 언제나 열릴 수있는 기회가 있습니다. 열거 형의 값을 기반으로 산술을 수행하는 것에 매우주의해야합니다. –

+0

그는 왜 지구상에서 열거 형을 사용합니까? 요일은 .NET 프레임 워크에 내장되어 있습니다. –

답변

2

아주 간단한 대안적인 접근이 쉽게 요일을 처리하는 기능에 밖으로 확장 할 수

Dim monday As Date = Date.Today 
While (monday.DayOfWeek <> DayOfWeek.Monday) 
    monday = monday.AddDays(-1) 
End While 

. 이것이 정말 대용량 코드가 아니라면 성능은 괜찮을 것입니다.

+0

@Matt Indeed. 그러나 OP는 특히 시작일이 아닌 월요일 이후였습니다. –

+0

실제로 그는 * 이전 * 월요일이 아닌 * 현재 * 주 월요일 이후에 특별히 있습니다. –

+0

@Matt Ah, 예 - 당신이 받고있는 것을 보았습니다. –

1

원하는대로해야합니다. 제공된 날짜로부터 이전 월요일을 찾습니다. 아무 루프가 너무 빨리 수 없습니다 산술 조정을 할 열거 값에 의존하지 않는, 그래서 열거 값이 이제까지 변경하는 경우 중단하지 않습니다

Public Shared Function PreviousMonday(ByVal dateValue As DateTime) As DateTime 
    Dim dayOffset As Integer 
    Select Case dateValue.DayOfWeek 
     Case DayOfWeek.Sunday : dayOffset = 6 
     Case DayOfWeek.Monday : dayOffset = 0 
     Case DayOfWeek.Tuesday : dayOffset = 1 
     Case DayOfWeek.Wednesday : dayOffset = 2 
     Case DayOfWeek.Thursday : dayOffset = 3 
     Case DayOfWeek.Friday : dayOffset = 4 
     Case DayOfWeek.Saturday : dayOffset = 5 
    End Select 

    Return dateValue.AddDays(-1 * dayOffset) 
End Function 
관련 문제