比较mysql的两个时间戳

时间:2016-01-18 11:08:00

标签: mysql vb.net timestamp

我有两个从mysql中检索的日期时间变量。 一个等于'now()',另一个代表最后一次更改行。

我需要比较这两个日期时间值以获得两者之间的差异。

这就是我的尝试(我从Mysql读取的内容是由定制的web 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。

我怀疑它与日期时间的格式有关,而不是VB想要的,但是我找不到任何将mysql转换为vb datetimes的东西,只是反过来。

任何方向都会受到欢迎!提前谢谢!

2 个答案:

答案 0 :(得分:1)

而是尝试减去下面的两个日期时间值,这将返回TimeStamp值。顺便说一句,您当前的日期时间格式是dd/mm/yyyy,我认为应该是mm/dd/yyyy

Dim timedifference As TimeStamp = nowtime - thishostlastpoll

答案 1 :(得分: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件事感到困惑。

首先,日期没有格式。格式是计算机(或您编写的计算机代码)如何向用户显示日期。网络(不是VB 本身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 vars:

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

结果:

  

A是1/18/2016 8:39:51 AM   B是2016年1月18日上午8:40:11
  比较为-1因此,dtA更早

DateTime.Compare可能有点令人困惑的是,结果表明较早/较小值,而大多数其他Compare方法表示较大。