如何将 FILETIME 转换为 Excel 日期

问题描述 投票:0回答:3

我有一个文件时间值,例如:122327856000000000 并想将其转换为 Excel 日期 (1988-aug-23)

excel date
3个回答
8
投票

我只能找到unix时间(自1970/1/1以来的秒数)的转换,但不能找到文件时间(自1601/01/01以来的纳秒)的转换,所以我想出了以下解决方案:

首先转换为unix时间,减去1970/1/1和1601/1/1之间的纳秒,即:116444736000000000。 结果值很容易转换为日期时间,因此最终公式为:

((CELL-116444736000000000)/10000000)/(24*60*60)+DATE(1970,1,1)

与以下相同:

((CELL-116444736000000000)/864000000000)+DATE(1970,1,1)

希望对其他人有帮助。


0
投票

如果你想向后——你可以从 Excel 转换为文件时间:

=((CELL-DATE(1970,1,1))*86400*10000000+116444736000000000)

0
投票

您的示例 FILETIME 将评估为

August 23 1988, 4:00.000 AM

获取 Excel 时间

[Days since 1/1/1900]

=TEXT( FILETIME / ( 86400 * 10 ^ 7 ) - 109205, "M/D/YYYY hh:mm:ss.000 AM/PM")

获取文件时间

[Nanoseconds since 1/1/1601]

=TEXT( ( CELL + 109205 ) * ( 86400 * 10 ^ 7 ), "#")

这可以在 VBA 中使用 FILETIME 的 LongLong 变量来完成

Dim FILETIME as LongLong: FILETIME = 122327856000000000
Debug.Print WorksheetFunction.Text(FILETIME / (86400 * 10 ^ 7) - 109205, _
"M/D/YYYY hh:mm:ss.000")

Dim ex_date as Date: ex_date = #09/23/1988 4:00:00 AM#
Debug.Print CLngLng((ex_date + 109205) + (86400 * 10 ^ 7))

除以 864000000000 得到自 1601 年 1 月 1 日以来的天数,然后减去从 1601 年开始到 1900 年开始还剩 109205 天

© www.soinside.com 2019 - 2024. All rights reserved.