Linq to SQL的VB.NET日期/时间格式问题

时间:2016-10-20 15:15:32

标签: vb.net linq datetime-format

我从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条件是要考虑显示为一个数字或两个数字的小时(我现在处理的同样的事情是日期)

2 个答案:

答案 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)

请注意第一个是如此简单,它甚至不值得构建方法,因此我将代码作为设置时间的一部分。