获取最近10个星期一的列表

时间:2010-04-21 22:48:55

标签: vb.net datetime

我想要一个下拉菜单,让我选择“周二开始的20周”回到10周一,但我不知道该如何去做。

我之前使用过date.now()等,但不知道如何做到这一点。

谢谢, 比利

更新代码

Public Sub GetMondays()
    Dim dtMondays As New DataTable()
    dtMondays.Columns.Add("Date")
    Dim i As Integer = 1
    While (dtMondays.Rows.Count < 11)
        Dim Day As DateTime = Today.AddDays(-i)
        If Day.DayOfWeek = 1 Then
            dtMondays.Rows.Add(Day)
        End If
        i += 1

    End While

    drpDate.DataSource = dtMondays
    drpDate.DataBind()

End Sub

4 个答案:

答案 0 :(得分:2)

你可以想出一个计算前一个星期一的日期的公式,但为什么不做一些简单的事情:

  • 开始循环。
  • 减去一天。
  • 检查是否是星期一。
    • 如果是,请添加到列表中。
    • 如果列表包含10个元素,则退出循环。
  • 回到开始循环。

我相信你可以实现这一点。这不是最快的方式,但它很简单,而且对于大多数用途来说可能足够快。如果你想优化它,你可以这样做,但除非每秒执行多次,否则它可能不值得你花时间。

答案 1 :(得分:1)

让我们通过它。我会在C#中做到这一点,但希望一些有进取心的年轻多语言可以为我做翻译并得到接受的答案。

DateTime.Today告诉你今天的约会对象。 DateTime.Today.DayOfWeek将今天的“星期几”作为枚举,星期日为0,星期六为6。

所以我们可以使用:

获取最新的星期一
var lastMonday = DateTime.Today.AddDays(1 - (int)DateTime.Today.DayOfWeek);

编辑这里有一个小故障,因为如果今天是星期天,你将会明天的 日期,而不是上周一。可能有一些非常棘手的数学方法来解决这个问题,但同样容易进行额外的检查:

if (lastMonday > DateTime.Today) lastMonday = lastMonday.AddDays(-7);

然后我们只需要得到其中的十个:

var lastTenMondays = from i in Enumerable.Range(0, 10)
                     select lastMonday.AddDays(i * -7);

答案 2 :(得分:0)

可能会迟到,但可能对其他人有帮助。

你可以做马克所说的,但是一旦你找到一个星期一,你就可以减去7(或者如果你想找到接下来的10个星期一),那么不要继续循环,而是获得另一个星期一,你可以做到这一点10次

* Begin loop.
* Subtract one day.
* Check if it is Monday.
      o If so, add to a list.
      o (in a for i = 1 to 10 loop) add 7 days and add to list (end for loop)
* Go back to start of loop.

这可能会节省一些时间。

答案 3 :(得分:0)

我正在寻找类似的东西,只是我想展示即将到来的星期一。这个帖子在某种程度上有帮助。谢谢! 尽管这个帖子已经过时了,但对于遇到的任何人来说,这可能会有所帮助:

Public Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim nextMondays = DateTime.Today.AddDays(1 - CInt(DateTime.Today.DayOfWeek))
        Dim i As Integer = 1

        If nextMondays < DateTime.Today Then
            nextMondays = nextMondays.AddDays(+7)
        End If

        For i = 0 To 14
            ComboBox1.Items.Add("Mon. " + nextMondays.AddDays(i * +7))
        Next i
End Sub