我有两个从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的东西,只是反过来。
任何方向都会受到欢迎!提前谢谢!
答案 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
方法表示较大。