2015-01-12 129 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#,但有一个[半重复这里](http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week),它有一个很好的功能,你可以使用一周中的任何一天。 –

+0

在事物的另一方面,虽然枚举在将来的版本中不会改变,但它们总是有可能会发生变化。我会非常谨慎的基于Enum的值来执行算术。 –

+0

他为什么会用枚举?在.NET框架中内建了一周的日子。 –

回答

2

一个非常简单的替代方法,它同时可能还不如高性能,但确实避免任何基于算术错误:

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

这可以很容易地延伸到了一个函数来处理每周的任何一天。除非这是一个非常高的代码量,否则性能会很好。

+0

@Matt的确。但OP是在周一之后,而不是开始日。 –

+0

其实他是在星期一后的*当前周*,而不是*前一个*星期一 –

+0

@Matt啊,是的 - 我看到你在 –

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 
相关问题