机房收费系统:VB获取标准北京时间,免除时间误差

机房收费系统:VB获取标准北京时间,免除时间误差,第1张

概述导读:这又是师傅给我指出的一个问题,说实话,其实开始根本没有当回事,觉得麻烦,可是,等我完成了获取标准北京时间后,我发现,这一步,是必须的。谢谢师傅对我的严格要求,让我一步一步的成长起来! 一、事件缘由 去验收机房的时候,当看着查询结果时,我是又傻了一回眼,我在501做的是24小时制,那边511是12小时制,出的日期和时间完全对不上号。我刚开始觉得没什么,因为我知道只是时间的格式不同而已,但是师傅

导读:这又是师傅给我指出的一个问题,说实话,其实开始根本没有当回事,觉得麻烦,可是,等我完成了获取标准北京时间后,我发现,这一步,是必须的。谢谢师傅对我的严格要求,让我一步一步的成长起来!


一、事件缘由

去验收机房的时候,当看着查询结果时,我是又傻了一回眼,我在501做的是24小时制,那边511是12小时制,出的日期和时间完全对不上号。我刚开始觉得没什么,因为我知道只是时间的格式不同而已,但是师傅说,你可以把它改为标准时间,你这时间错乱的,让别人怎么看?当时,就跟师傅说,是不是像手机一样,获取全球卫星定位的那个日期时间,不管我怎么折腾,那都是标准时间。

现在,想想也真是,要是账单查询,可就糟了,这日期和时间全对不上号,该是多么悲剧的一件事。


最先,我系统里的全部时间日期,都是这样写的:

txtOffDate.Text = Date
txtOffTime.Text = Time

其实,只要是计算机设定的时间没有误差,那这样写也就没有错,可是,有时候,就会出现时间格式不统一,可能还有日期不对的情况,这样,我获取的这个日期和时间就是错误的,我写进数据库的所有数据都存在着误差,要真是做财务的,相差一天,或者一个小时的账单不统一,我感觉就会出大问题。经过努力查询(问度娘的,作者不知道是谁,所以没法标注,目前,我写不出这样的,只能勉强理解),终于解决了。


二、解决办法

1,VB获取卫星定位时间,还真让我给弄出了一个,那定位课详细了,什么经度纬度都能给获取到,别说什么日期时间了。但这个真的太高大上了,看了半天都理解不了。所以,给放弃了!

2,通过使用Winsock控件,这个也可以实现,但真的代码一大堆,也有一些理解不了。所以,给放弃了。

3,通过Internet获取网络标准时间,这个也有不同的方法,我现在觉得相对简单的有两种,第一种我不知道怎么把日期和时间分开,所以给弃了。

一、Private Function GetHTML(Url As String)

Dim xmlhttp As Object

Set xmlhttp = CreateObject("Microsoft.XMLhttp")

xmlhttp.open "GET",Url,True
xmlhttp.send (Null)

While xmlhttp.ReadyState <> 4

DoEvents

Wend

GetHTML = xmlhttp.responseText

End Function

Private Function getTime() As Date

Dim Regex As Object,ms As Object,m As Object
Dim HTML As String
Dim t As String

HTML = GetHTML("http://www.time.ac.cn/timeflash.asp?user=flash")

Set Regex = CreateObject("VBSCRIPT.REGEXP")

Regex.IgnoreCase = True
Regex.Pattern = "<year>(\d+)</year><month>(\d+)</month><day>(\d+)</day>.+?<hour>(\d+)</hour><minite>(\d+)</minite><second>(\d+)</second>"

Set ms = Regex.Execute(HTML)

If ms.Count = 0 Then

getTime = Now()

Else

t = ms.Item(0).SubMatches(0) _
& "-" & ms.Item(0).SubMatches(1) _
& "-" & ms.Item(0).SubMatches(2) _
& " " & ms.Item(0).SubMatches(3) _
& ":" & ms.Item(0).SubMatches(4) _
& ":" & ms.Item(0).SubMatches(5)

If IsDate(t) Then getTime = cdate(t) Else getTime = Now()

End If

End Function

Private Sub Command1_Click()

Call getTime
Text1.Text = getTime

End Sub


然后第二种,就相对而言,好理解多了,活不多说,一个单词一个单词去查吧,拼起来,也就是那个意思了。它的日期和时间,是分开的,也就是想用哪个都可以。推荐感兴趣的人了解了解Xmlhttp,还有Set Xmlhttp = CreateObject中用的create和我们平时用的new的区别,以及里面的StrConv函数。


二、Private Sub Command1_Click()

Call theTime
Text1.Text = theTime

End Sub

Public Function theTime(Optional getDate As Boolean = True,Optional getTime As Boolean = True) As String

Dim Xmlhttp As Object

Set Xmlhttp = CreateObject("Microsoft.XMLhttp")

If getDate = True Then

Xmlhttp.Open "Get","http://www.symental.com/time/date.asp",False
Xmlhttp.send
theTime = StrConv(Xmlhttp.ResponseBody,vbUnicode)

End If

If getTime = True Then

Xmlhttp.Open "Get","http://www.symental.com/time/time.asp",False
Xmlhttp.send
theTime = IIf(theTime <> "",theTime & " " & StrConv(Xmlhttp.ResponseBody,vbUnicode),StrConv(Xmlhttp.ResponseBody,vbUnicode))

End If

Set Xmlhttp = nothing

End Function


三、感受

现在的我,还很弱小,我自己写不出这样的函数,我只能踩着别人的肩膀上,我期望有一天,我的肩膀,也可以让别人踩。我现在还不能完全理解这些代码,但我相信,总有一天,我会的。

我太容易将就,从学生到机房,都是如此,真的很庆幸,我有那么严格要求的师傅。师傅总是很仔细,从用户的使用习惯,用户的实际需求,跟我讲部署,对我的系统进行页面排版上的指导,也能发现我系统中不合理的地方,真的很好,谢谢师傅们的指导。

其实,师傅真的挺关爱我的。那天我说我想当黑客,师傅就跟我说了一个名词:sql注入,后来,我真的了解了很多,很感兴趣,自己也弄了一个表简单的试了一下,忒恐怖了!也学到了一点点防止SQL注入的方法。谢谢师傅!


2014.8.18修改

对于上述所说的解决方案,我感到深深的惭愧。当时太过兴奋,就往上贴了。其实,这些办法是存在问题的:比如说没有网怎么办?

后来,经过师傅的指导,终于知道,根本不用这么复杂,可以在VB中通过SQL语句获取数据库里的时间,这样也能保证时间统一。这个有专门的函数,获取时间日期,每个也就是一行代码的事儿,函数一搜一大把。比如日期:getdate,时间:convert。



请大家多多指教,谢谢!

总结

以上是内存溢出为你收集整理的机房收费系统:VB获取标准北京时间,免除时间误差全部内容,希望文章能够帮你解决机房收费系统:VB获取标准北京时间,免除时间误差所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1272816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存