我正在使用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
答案 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"))