2016-01-18 1 views
1

У меня есть две переменные datetime, полученные из mysql. один равен 'now()', а другой представляет собой последний раз, когда строка была изменена.Сравнение двух временных меток от mysql

Мне нужно сравнить эти два значения даты и времени, чтобы получить разницу между ними.

Это то, что я пытался (мое чтение в с Mysql обрабатывается на заказ веб-API) ...

'get the current time 
Dim nowtime As DateTime = readsql("now()", "hosts", "") 
    Console.WriteLine("NOW IS : " & nowtime) 

    'read in all the rows 
    Dim hosts() As String = readsql("hostname", "hosts", "chk_ping=1").ToString.Split("|") 

    For Each host As String In hosts 
     If Not host.Contains("No results found") Then 
      Dim thishostip As String = readsql("IP", "hosts", "hostname='" & host & "'") 
      Dim thishostlastpoll As DateTime = readsql("last_poll", "hosts", "hostname='" & host & "'") 

      If thishostip.Contains("No results found") Then Exit For 
      Console.WriteLine("HOST TIME IS:" & thishostlastpoll.ToString) 

      Dim timedifference As Integer = DateTime.Compare(nowtime, thishostlastpoll) 
      Console.WriteLine("Time diff for " & host & " is : " & timedifference) 


     End If 

    Next 

Мои значений даты и времени приходят как так ...

18/01/2016 10:53:00 
18/01/2016 10:52:52 

и не возникает ошибка/исключение, но независимо от разницы, «timedifference» всегда 1.

Я подозреваю, что это связано с тем, что формат datetime не является тем, что хочет VB s, но я не могу найти что-либо для преобразования mysql в vb datetimes, просто наоборот.

любое направление было бы оценено! Заранее спасибо!

+0

Даты формата не имеют формата. После того, как вы получите 2 значения в вазах DateTime, они являются Net DateTime vars, если Net не понравилось что-то о них, вы получите ошибку. Если я сравниваю эти 2 значения, он отлично работает. Можете ли вы показать 'readsql' и сообщить нам тип данных, используемый в DB – Plutonix

+0

readsql - это HTTP-вызов php api, который обрабатывает все взаимодействия с базами данных. Я думаю, что буду использовать tickcounter, а не сравнивать фактические времена, все это вместе отменяет эту проблему :) – John

ответ

1

I suspect its something to do with the format of the datetime not being what VB wants, but I cant find anything for converting mysql to vb datetimes, just the other way round.

Вы можете спутать около 1 или 2 вещи.

Во-первых, даты не имеют формата. Форматы - это то, как компьютеры (или компьютерный код, который вы пишете) отображают дату для пользователя. A Net (не VB per se) DateTime - это значение, указывающее момент времени, хранящийся как очень большое число. Поскольку 635886720000000000 (сегодняшняя дата) имеет мало смысла для большинства из нас, тип DateTime выражает его в обычном формате.

Объекты поставщика данных MySql прекрасно способны преобразовывать данные взад и вперед из значений Net DateTime, однако MySql должен хранить его на основе определения столбца.

Реальная проблема может быть здесь:

Dim timedifference As Integer = DateTime.Compare(nowtime, thishostlastpoll) 

Учитывая имя переменной и как отображать его, вы можете быть озадачены тем, что DateTime.Compare делает. От MSDN:

Сравнивает два экземпляра DateTime и возвращает целое число, которое указывает, является ли раньше, так же, как, или позже, чем второй экземпляр первой инстанции.

Указанные 2 MySql колонны определяется как TIMESTAMP(3) и читать в NET DateTime Варс:

Console.WriteLine("A is {0}", dtA) 
Console.WriteLine("B is {0}", dtB) 
Console.Write("Compare is {0}, therefore ", DateTime.Compare(dtA, dtB)) 

Select Case DateTime.Compare(dtA, dtB) 
    Case Is < 0   ' ie -1 
     Console.WriteLine("dtA is earlier") 
    Case Is > 0 
     Console.WriteLine("dtB is earlier") 
    Case 0 
     Console.WriteLine("dtA and dtB are exactly equal") 
End Select 

Результат:

А 1/18/2016 8:39:51 AM
B is 1/18/2016 8:40:11 AM
Сравнить -1, поэтому dtA ранее

Что может быть немного запутанным в отношении DateTime.Compare, так это то, что результат показывает ранее или меньше, тогда как большинство остальных Compare методов указывают на то, что больше.

+0

Как точно вы правы ...« 1 », что меня оставляют на самом деле правильно и я неправильно понял эту функцию. Спасибо за то, что вы указали это. У меня есть другой метод для достижения того, что мне нужно, и теперь я реализую его. – John

1

Вместо этого попробуйте вычесть два значения datetime, как показано ниже, которое вернет значение TimeStamp. Кстати, ваш текущий формат даты и времени является dd/mm/yyyy, который я думаю, должно быть mm/dd/yyyy

Dim timedifference As TimeStamp = nowtime - thishostlastpoll 
+0

Я получаю это .... 'Ошибка Значение типа' System.TimeSpan 'не может быть преобразовано в 'Дата'.' Как я могу изменить формат, полученный от mysql? Кроме того, я использовал 'datetime' и 'date', используя «timestamp», давая мне временную метку «Тип» не задано « – John

 Смежные вопросы

  • Нет связанных вопросов^_^