VB.NET Date/Time Linq to SQL 的格式问题

VB.NET Date/Time formatting issues with Linq to SQL

我从 SQL 中提取日期时间信息,将其转换为字符串,然后使用子字符串将其分割成日期、小时和分钟变量。在数据库中,日期显示为 MM/dd/YYYY,month/day 始终使用两位数字(例如 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 是显示我的时间的数据网格 table,starttime.length 条件是要考虑显示为一位或两位的小时(与我现在处理的相同)日期)

不要转换为字符串,而是使用 DateTime 对象的属性。例如:

pulledStartHour = pulledStartTime.Hour.ToString("00")

将 return 小时(24 小时格式),然后将其转换为字符串。

您也可以改用 .ToString(format)。

pulledStartHour = pulledStartTime.ToString("hh")
pulledStartAMPM = pulledStartTime.ToString("tt")

它为您提供小时数(12 小时格式)和 AM/PM。

您还可以组合字符串格式:

pulledStartTime.ToString("hh:mm tt")

https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

您在处理字符串方面花费了 方式 太多的精力。使用给定的 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)

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