如何为当前时间添加30分钟

时间:2015-08-09 12:55:54

标签: vb.net

我正在使用VB.NET。我有一个名为startTimeDDL的下拉列表。我正在使用循环在该下拉列表中输入。

    ' Auto fill "Start Time"  for DropDownList
    Dim StartTime As DateTime = #12:00:00 AM#
    For i As Integer = 0 To 47
        StartTimeDDL.Items.Add(StartTime.ToString("hh:mm tt"))
        StartTime = DateAdd(DateInterval.Minute, 30, StartTime)
    Next

所以看下面,这将在dropdownList中。不过格式是hh:mm am / pm。

凌晨12:00 12:30 AM 01:00 AM 01:30上午 凌晨02:00 ...
晚上11:30

问题:
让我们说当前时间是1:21:01 pm比我想编写代码所以从下拉列表中选择下午1:30。现在再举一个例子。当然时间是凌晨12点00分,而不是我从下拉列表中选择12:30 AM。最后一个例子。当前时间是凌晨2:10:12而不是我想从下拉列表中选择2:30 AM。

这是我到目前为止编写的代码。问题是我只选择当前时间。我现在可以模仿地做我想做的事吗?

    Dim dDate As DateTime = DateTime.Now.ToString("hh:mm tt")
    Dim temp As String = dDate
    StartTimeDDL.Items.FindByValue(temp).Selected = True

3 个答案:

答案 0 :(得分:2)

如果分钟值超过30,则向上舍入,如果分钟值低,则向下舍入。

以下是一个示例实现,您需要决定如何处理“正好超过30小时”边缘情况。在我的代码中,它也将为此进行整理。

SELECT a.id, b.match_id 
FROM player a 
  LEFT OUTER JOIN game b ON a.team_id = b.home_team_id or a.team_id = b.away_team_id 
WHERE b.round = 1

用法:

Private Function RoundDateToHalfHours() As Date
    Dim current As DateTime = DateTime.Now
    Dim ts As TimeSpan

    If current.Minute >= 30 Then
        ts = New TimeSpan(current.Hour + 1, 0, 0)
    Else
        ts = New TimeSpan(current.Hour, 30, 0)
    End If

    Return current.Date.AddTicks(ts.Ticks)
End Function

答案 1 :(得分:2)

当你应该使用TimeSpan时,你正在使用DateTime快速和松散地玩,需要一些小心。将整数向上舍入到任意间隔的一般方法是

 roundedUp = interval * ((number + interval - 1) \ interval)

您可以在DateTime上轻松使用它,将其转换为刻度线,单行

Public Function RoundupDate(dt As DateTime, interval As TimeSpan) As DateTime
    Return New DateTime(interval.Ticks * ((dt.Ticks + interval.Ticks - 1) \ interval.Ticks))
End Function

样本用法:

    Dim example = #2:10:12 AM#
    Dim rounded = RoundupDate(example, TimeSpan.FromMinutes(30))

答案 2 :(得分:0)

不确定“下拉列表”的含义是什么。在这个例子中,我使用了一个ComboBox。

    Dim StartTime As DateTime = #12:00:00 AM#
    'load combo box
    Do
        StartTimeDDL.Items.Add(StartTime.ToString("hh:mm tt"))
        StartTime = StartTime.AddMinutes(30)
    Loop While StartTime.TimeOfDay.TotalDays > 0

    Dim selectTime As DateTime = #2:10:12 PM# 'TEST  find this <<<<<<<<<<<<<<<<<<<

    'round time to 30 minutes
    Dim numSecs As Integer = (CInt(selectTime.TimeOfDay.TotalSeconds) \ 1800) * 1800

    'the OP said 'les say current time is 12:00:00 AM than I was to select 12:30 AM"
    'so....
    numSecs += 1800 'round up 30 minutes ????????

    'create 'find'
    Dim ts As New TimeSpan(0, 0, numSecs)

    Dim findDate As New DateTime(ts.Ticks)

    StartTimeDDL.SelectedIndex = StartTimeDDL.FindStringExact(findDate.ToString("hh:mm tt"))