在.NET中的VB中,我可以使用DateTime.Now.Ticks.ToString("x")
为多部分表单边界准备字符串,例如8d4b7556f42792c
我正试图在Excel中的VBA中获得同样的东西。
在Excel VBA中,我可以使用DateTime.Now
来获取格式:19/06/2017 20:54
但这并不是很有用,我需要将其转换为刻度线串然后转换为十六进制。到目前为止,我发现HEX(DateTime.Now)
只给了我一个像A79A
这样的四个字符串返回,这不是我需要的。
我可以从DateTime.Now
得到嘀嗒声吗?!
编辑:我刚刚发现了这个技巧来获得某种Tick Count:
Private Declare Function GetTickCount Lib "kernel32" () As Long
MsgBox (GetTickCount())
这给了我一个负面的左右......这可能对我需要的东西有用,但它现在是TickCount吗?
答案 0 :(得分:3)
Excel无关紧要,DateTime
是来自VBA
标准库的模块,无论主机是什么,它都会在任何VBA项目中被引用。
VBA中的Date
基本上是Double
,其中整数部分是自1899年12月30日以来的天数:
?CDate(1)
12/31/1899
小数部分表示该值的时间部分,即1小时为1/24,1分钟为1/60,1秒为1/60,1毫秒将是1/1000 ......
在使用之前,您应该在MSDN上阅读GetTickCount
:
经过的时间存储为DWORD值。因此,如果系统连续运行49.7天,时间将回绕到零。要避免此问题,请使用GetTickCount64函数。否则,在比较时间时检查溢出情况。
如果你得到一个负滴答计数,这意味着你的系统已经运行了很长一段时间并溢出了DWORD
大小,32位(即2 31 - 1,或2,147,483,647)
而不是使用GetTickCount
并使用或多或少无意义的" ticks" (相对于系统正常运行时间[并且仅精确到~15ms]),为什么不使用实际系统时间并获得实际的毫秒数?
定义SYSTEMTIME
结构:
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
声明GetSystemTime
程序:
Private Declare Sub GetSystemTime Lib "Kernel32" (ByRef lpSystemTime As SYSTEMTIME)
通过引用传递SYSTEMTIME
值来调用它:
Public Sub Test()
Dim t As SYSTEMTIME
GetSystemTime t
Debug.Print t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds
End Sub
检索到的值将是UTC时间,因此如果您需要本地时间,请应用适当的偏移量。