我有一个文件时间值,例如:122327856000000000 并想将其转换为 Excel 日期 (1988-aug-23)
我只能找到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)
希望对其他人有帮助。
如果你想向后——你可以从 Excel 转换为文件时间:
=((CELL-DATE(1970,1,1))*86400*10000000+116444736000000000)
您的示例 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 天