最新的FILETIME

Aur*_*ura 16 c++ windows utc filetime

我正在创建一个模拟对象来测试我的应用程序,以便它在边界条件下工作.我FILETIME在Windows SDK中使用.

该链接显示这是1601年1月1日(我假设午夜00:00:00两者的最早时间dwLowDateTimedwHighDateTime0x00000000),所以我有.什么是最新的FILETIME?

我的第一直觉是设置dwLowDateTimedwHighDateTime0xFFFFFFFF,后来我质疑,如果这确实是一个有效的时间,我需要测试,因为在我的链接页面说,SetFileTime函数使用0xFFFFFFFF指定文件的以前的读取时间应予以保留.

hon*_*onk 20

我的理解是,它FILETIME代表任何有效SYSTEMTIME的64位.如果你采取的限制SYSTEMTIME(在30827一毫秒),那么你最终获得FILETIME0x7fff35f4f06c58f0使用SystemTimeToFileTime().

但是,如果你把0x7fffffffffffffff进入FileTimeToSystemTime(),那么你将在今年30828结束了,虽然这个日期是无效的SYSTEMTIME.任何较大的值(0x8000000000000000及以上)都会导致FileTimeToSystemTime()失败.

总而言之,我建议不要超越0x7fff35f4f06c58f0以保持兼容SYSTEMTIME.

  • 根据@NickShaw联系的专利,FILETIME距其1601年的时间范围为+/- 30,000年.然而,实际范围仅为+/- 29,227(和一些污水).而SYSTEMTIME应该是从0年到65,535年.因此微软并没有费心去准确实施他们所申请的专利.:) (3认同)

Nic*_*haw 6

根据链接,FILETIME 代表:

...自1601 年 1 月 1 日(UTC)以来 100 纳秒间隔的数量。

所以不是 1970 年 1 月 1 日。

它还说

...SetFileTime 函数[例如]使用 0xFFFFFFFF 来指定应保留文件的先前访问时间。

所以我认为您不会期望 0xFFFFFFFF 是有效的最大值。

根据专利 6853957,范围是纪元(1601 年 1 月 1 日)前后 30,000 年。这意味着您也可以将其与负日期(即纪元之前的日期)一起使用。

编辑:刚刚计算:它可以存储(大约)58,454 天的 100 纳秒间隔,所以 +/- 30,000 年听起来是一个不错的值,当然,如果您接受负日期。

  • 尽管该专利称 FILETIME 为 +/- 30,000 年,但实际上要短一些。0x7FFFFFFFFFFFFFFF / 10,000,000 / 86,400 / 365.242198 是 29,227 年。因此,请相应地选择您的编程限制。 (2认同)