首页 文章

使用VB.NET查找一周内星期一的日期

提问于
浏览
17

我需要找到一种方法来查找我们所在的任何一周的星期一的日期(DD / MM / YYYY) .

例如,本周,星期一将是09/11/2009,如果这是下周,那将是2009年11月16日 .

我设法以代码的形式获得了某个地方,但我得到的只是“无法转换为整数”错误 . 我正在使用Date.Today和AddDays() .

谢谢你的帮助 . :)

9 回答

  • 5

    如果星期日是一周的第一天,你可以简单地这样做:

    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

    我刚刚在一个正在研究的项目中做到这一点 - 我保证,这是正确的 . 这是一个在给定日期之后返回第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

    如果星期一是第一天,另一种方法是:

    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)
    
  • 2

    一个简单的方法应该得到你想要的:

    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);
    
  • 36

    DateTime.DayOfWeek是一个枚举,指示给定日期的哪一天 . 由于星期一是1,您可以使用以下代码找到当周的星期一:

    Dim monday As DateTime = Today.AddDays((Today.DayOfWeek - DayOfWeek.Monday) * -1)
    
  • 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 instance As DateTime
    Dim value As DayOfWeek
    
    value = instance.DayOfWeek
    

    见:http://msdn.microsoft.com/en-us/library/system.datetime.dayofweek.aspx

  • 1
    =Format(DateAdd("d", (-1 * WeekDay(Date.Today()) + 2), Date.Today()), "dd/MM/yyyy")
    
  • 0

    继我对Meta-Knight的回答之后,这是一个简短的函数,我在评论中提到了更正:

    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
    

相关问题