2016-10-20 8 views
0

Я извлекаю информацию о времени и времени из SQL, преобразовывая ее в строку, а затем подстроку, чтобы отрубить ее в переменных даты, часа и минуты. В базе данных дата отображается как MM/dd/YYYY, а месяц/день всегда используют две цифры (например, 09/04/2016), но после запроса она отображается в моей заявке как (9/4/2016)), который сбрасывает счетчик подстроки. Как мне получить мой запрос, чтобы сохранить 0 впереди, когда это необходимо?Проблемы с форматированием даты и времени VB.NET с Linq to SQL

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 является DataGrid, который отображая мое расписание, условия starttime.length должны принять во внимание тот час, что отображается в виде одной цифры или двух (то же самое, я имею дело с теперь для даты)

+0

Не могли бы вы обновить свой вопрос и предоставить код, который у вас уже есть, пожалуйста. – Bugs

+3

Если вы извлекаете datetime в качестве типа 'DateTime' вместо строки, вы можете просто получить доступ к свойствам' Date', 'Hour' и' Minute' вместо подстроки –

+0

Является ли он хранится в SQL как DATETIME или String? – djv

ответ

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) 

Обратите внимание, как первый один настолько прост, что даже не стоит строить метод больше, и s o Вместо этого я включаю код как часть установки времени.

+0

удивительный, спасибо за помощь! – Alex

2

Вместо преобразования в строку используйте свойства объекта DateTime. Например:

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

вернет час (в 24-часовом формате), который затем преобразуется в строку.

Вы также можете использовать .ToString (format).

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

Что дает вам часы (в 12-часовом формате) и AM/PM.

Вы также можете комбинировать строки foramts:

pulledStartTime.ToString("hh:mm tt") 

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

+0

удивительный, спасибо за информацию! – Alex