какое ближайшее время? - PullRequest
0 голосов
/ 26 июня 2018

Ну, ребята, у меня есть проект для ( Food Times ) хорошо?и у меня есть 5 раз для еды

( Утро , Полдень , Закат , Ночь , Полночь)


  • Утро: 03:20
  • Полдень: 12:05 PM
  • Закат: 15:46
  • Ночь: 19:33
  • Полночь: 20:28

теперь мне нужно поставить таймер, чтобы проверить, соответствует ли текущее время времени массива. Если он находит какое-либо время массива и текущее время ПК, он выводит сообщение

* 1042.*

Я действительно приложил усилия и написал код

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim TimesArray() As String = {"03:20 AM", "12:05 PM", "03:46 PM", "07:33 PM", "08:28 PM"}
    Dim NamesArray() As String = {"Morning", "Midday", "Sunset", "Night", "Midnight"}
    Dim time = DateTime.Now.TimeOfDay
    Dim q = TimesArray.Select(Function(t, i) New With {.Time = DateTime.Parse(t).TimeOfDay, .I = i}).Select(Function(d) New With {d.Time, .Diff = If(d.Time >= time, d.Time - time, New TimeSpan(24, 0, 0) + d.Time - time), d.I})
    Dim m = q.Min(Function(d) d.Diff)
    Dim r = q.First(Function(d) d.Diff = m)
    MsgBox("Food" & " " & NamesArray(r.I) & " " & "After" & " " & r.Diff.Hours & " " & "Hour" & " " & "and" & " " & r.Diff.Minutes & " " & "Minutes.")
End Sub

и , он работает на 100% , но нуждается в System.Linq.dll в .Net Fremwork 3.5 из-за функции Select Вот почему я хочу что-то, для чего эта функция не нужна ( Select ) и не нужна System.Linq.dll in .Net fremwork 3.5

1 Ответ

0 голосов
/ 26 июня 2018

Это должно для того, что вы хотите.При каждой отметке таймера подпрограмма перебирает ваш массив и проверяет текущее время по массиву, а разница во времени меньше 0 часов и 0 минут, отображается окно сообщения.

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim TimesArray() As String = {"03:20 AM", "12:05 PM", "03:46 PM", "07:33 PM", "08:28 PM"}
    Dim NamesArray() As String = {"Morning", "Midday", "Sunset", "Night", "Midnight"}

    For i As Integer = 0 To TimesArray.Count - 1
        Dim tempDateTime As Date = Date.Parse(TimesArray(i))
        Dim tempTimeDiff As TimeSpan = tempDateTime.Subtract(DateTime.Now)
        If tempTimeDiff.Hours = 0 And tempTimeDiff.Minutes = 0 Then
            MessageBox.Show("Food " & NamesArray(i) & " After " & tempDateTime.Hour & " and " & tempDateTime.Minute & " Minutes.")
        End If
    Next
End Sub
...