|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 lolmuta 于 2014-3-4 13:45 编辑
若我要取得时间的话,要搞定这单位...- Public Type FileTime ' 8 Bytes
- dwLowDateTime As Long
- dwHighDateTime As Long
- End Type
复制代码 查了下这个时间单位的定义...
http://www.vbgood.com/api-filetime.html- windows提供了一种特殊的机制,可以记录文件的访问及创建时间。在win32环境中,这些信息以64位值的形式保存,量度的是自1601年1月1日以来经历的100ns时间单位数量(64-bit number specifying the elapsed time since January 1, 1601, in 100-nanosecond increments.)
复制代码 google查的- 100 ns =
- 1.0 × 10^-7 seconds
复制代码 刚刚得到的其中一个资料是
dwLowDateTime =1531919366
dwHighDateTime =30356590
那这个时间就是
從1600/1/1 开始经过了
303565901531919366 10^-7秒吗?
问题算出来是错的,我又想以2进位的角度来看
30356590*(2^31-1)+1531919366
=65190282135603096(ns) /10^(7)
=6519028213.5603096(s) /60
=108650470.22600516(m) /60
=1810841.1704334193333333333333333(h) /24
=75451.715434725805555555555555556(天)
'以VBA去算天数为
- Const StartD As Date = #1/1/1601#
- Const EndD As Date = #3/4/2014#
- Dim i As Longi = DateDiff("d", StartD, EndD)'i=15907
复制代码 二个差了将2倍
75451.715434725805555555555555556(天)*2=150903.43086945161111111111111111感动有接近 15907了
但是还是错啊...
30356590*(2^32)+1531919366
=130380562800000006(ns) /10^(7)
=13038056280.0000006(s) /60
=217300938.00000001(m) /60
=3621682.3000000001666666666666667(h) /24
=150903.42916666667361111111111111(天)
看来终于成功了......看来他的long在Ç里面应该是正整数,才能达到2^32个
所以推算時間的公式是
終於算出來了…(应该没错吧...)
- (dwHighDateTime*(2^32)+dwHighDateTime )*(10^(-7))=得到的值是从1600年1月1日到你要的日期差了几秒
复制代码 问题是时间有必要搞到那么精准吗???????????????? |
|