我从SQL中提取日期时间信息,将其转换为字符串,然后使用子字符串将其切换为日期,小时和分钟变量。在数据库中,日期显示为MM / dd / YYYY,月/日始终使用两位数(例如09/04/2016),但在查询后它显示在我的应用程序中(9/4/2016) )抛出我的子串数。如何在必要时获取我的查询以保持0?
Private Sub pullDate()
pulledDate = dgvTimeManager.SelectedItem.TimeIn.ToString
pulledDate = pulledDate.Substring(0, 10)
datepickerEdit.SelectedDate = Date.Parse(pulledDate)
End Sub
Private Sub pullStartTime()
pulledStartTime = dgvTimeManager.SelectedItem.TimeIn.ToString
If pulledStartTime.Length = 22 Then
pulledStartHour = pulledStartTime.Substring(11, 2)
pulledStartMinute = pulledStartTime.SubString(14, 2)
pulledStartAMPM = pulledStartTime.SubString(20, 2)
ElseIf pulledStartTime.Length = 21 Then
pulledStartHour = pulledStartTime.SubString(11, 1)
pulledStartMinute = pulledStartTime.SubString(13, 2)
pulledStartAMPM = pulledStartTime.SubString(19, 2)
End If
If pulledStartAMPM = "AM" Then
comboStartEditAMPM.SelectedIndex = 0
ElseIf pulledStartAMPM = "PM" Then
comboStartEditAMPM.SelectedIndex = 1
End If
txtStartHrEdit.Text = pulledStartHour
txtStartMinEdit.Text = pulledStartMinute
End Sub
dgvtimemanger是显示我的时间表的数据网格,starttime.length条件是要考虑显示为一个数字或两个数字的小时(我现在处理的同样的事情是日期)
答案 0 :(得分:2)
使用DateTime对象上的属性,而不是转换为字符串。例如:
pulledStartHour = pulledStartTime.Hour.ToString("00")
将返回小时(24小时格式),然后将其转换为字符串。
您也可以使用.ToString(格式)。
pulledStartHour = pulledStartTime.ToString("hh")
pulledStartAMPM = pulledStartTime.ToString("tt")
它为您提供小时(12小时格式)和上午/下午。
您还可以组合字符串foramts:
pulledStartTime.ToString("hh:mm tt")
https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
答案 1 :(得分:0)
您正在花费方式过多地使用字符串。使用您提供的DateTime
值,此代码更多更简单:
Private Sub pullDate()
datepickerEdit.SelectedDate = dgvTimeManager.SelectedItem.TimeIn.Date
End Sub
Private Sub pullStartTime()
Dim pulledStartTime As DateTime = dgvTimeManager.SelectedItem.TimeIn
txtStartHrEdit.Text = pulledStartTime.ToString("hh")
txtStartMinEdit.Text = pulledStartTime.ToString("mm")
comboStartEditAMPM.SelectedIndex = If(pulledStartTime.Hour >= 12, 1, 0)
End Sub
此外,我倾向于编写这些方法来接受一个论点:
Private Sub SetStartTime(DateTime timeToSet)
datepickerEdit.SelectedDate = timeToSet.Date
txtStartHrEdit.Text = timeToSet.ToString("hh")
txtStartMinEdit.Text = timeToSet.ToString("mm")
comboStartEditAMPM.SelectedIndex = If(timeToSet.Hour >= 12, 1, 0)
End Sub
然后像这样打电话给他们:
SetStartTime(dgvTimeManager.SelectedItem.TimeIn)
请注意第一个是如此简单,它甚至不值得构建方法,因此我将代码作为设置时间的一部分。