在windows下获取了文件的最后修改时间FILETIME,由于它是32位而DOS是16位的,因此我进行了如下转换,用FileTimeToDosDateTime函数进行转换
据个例子
假设某文件的最后访问时间为:2004-06-17 18:15:18
DOS下用getftime获取时间,其时间为结构体struct ftime ft(变量),大小为4个字节。
直接用printf(“%ld”,ft)数据结果是819040745,十六进制为30D190DB
用printf("%d-%d....",ft.year,ft.month...)输出结果为2004-06-17 18:15:18
win下用GetFileTime获取时间, 并用FileTimeToDosDataTime进行转换
日期为:12497,十六进制为:30D1
时间为:20969,十六进制为:51E9
『考虑到时区,应该在小时加8,因此,时间为:37353,十六进制为:91E9』在这里,问题出现,日期相同,但是时间不一样了一个是90DB,一个是91E9,完全不一样,根据其存储格式,时间的存储格式,经过手工转换,90DB转换后时间变成18:06:54,而不是18:15:18,大侠们,这是怎么回事???等待中。。
据个例子
假设某文件的最后访问时间为:2004-06-17 18:15:18
DOS下用getftime获取时间,其时间为结构体struct ftime ft(变量),大小为4个字节。
直接用printf(“%ld”,ft)数据结果是819040745,十六进制为30D190DB
用printf("%d-%d....",ft.year,ft.month...)输出结果为2004-06-17 18:15:18
win下用GetFileTime获取时间, 并用FileTimeToDosDataTime进行转换
日期为:12497,十六进制为:30D1
时间为:20969,十六进制为:51E9
『考虑到时区,应该在小时加8,因此,时间为:37353,十六进制为:91E9』在这里,问题出现,日期相同,但是时间不一样了一个是90DB,一个是91E9,完全不一样,根据其存储格式,时间的存储格式,经过手工转换,90DB转换后时间变成18:06:54,而不是18:15:18,大侠们,这是怎么回事???等待中。。
解决方案 »
- mfc中实现程序暂停
- 问些VC6.0下界面美化的若干小问题
- 在一个线程中用WHILE循环,循环里用ReadProcessMemory,一直读某个地址的值,程序运行后会电脑变慢?
- 如何制作像QQ广告那样的对话框?
- 关于VC++6.0中的编译问题
- unsign char和byte类型有什么区别
- 请问如何让属性表CPropertySheet充满整个CFormView窗口?
- 真奇怪,为什么用accept得到的sockaddr_in 得到的端口号不是我所设置的端口号,而且每次得到的都不一样,请问怎么样才能得到连接的客户端端口号?
- 怎样删掉XTP界面的关闭按钮
- 有关DIRECTX编程
- 视图切换问题
- 急啊,这个怎么回事啊?
2.不应该小时上加8,而是在整个的FILETIME上加上 8 * 60 * 60 * 1000000000 / 100
当通过FileTimeToDosDataTime转换之后就成为了4个字节,其中2个字节表示日期,另外2个字节表示时间,而时间加上8之后就是文件的最后访问时间我的问题是转换之后跟DOS下直接读取的值不一样,既加上8之后的4个字节数值跟DOS下的4个字节数值是不一样的
高5位15-11表示小时
中间6位10-5表示分钟
低5位4-0表示秒1/2