Excel及Power BI中如何将0x格式时间戳转换为标准日期
Excel转换十六进制FILETIME时间戳的方法
你拿到的0x00000000079A367B是Windows体系下的FILETIME格式十六进制时间戳,并非通用Unix时间戳:它的计数起点是1601年1月1日 00:00:00 UTC,单单位代表100纳秒时长,直接套用普通时间戳转日期的公式必然得到错误结果。
全版本Excel兼容方案
所有Excel版本都可以用这套公式,不需要加载插件:
- 第一步:预处理时间戳字符串,把开头的
0x前缀删掉,仅保留后续16位十六进制字符,示例值处理后为00000000079A367B,将该字符串存入A1单元格。 - 第二步:使用拆分转换公式规避
HEX2DEC函数的10位十六进制数转换上限,直接计算日期值:
若需要输出UTC标准时间,输入以下公式:
若需要输出北京时间(UTC+8),在公式末尾追加=(HEX2DEC(LEFT(A1,8))*2^32 + HEX2DEC(RIGHT(A1,8)))/864000000000 + DATE(1601,1,1)+ 8/24即可;如果服务器时区为其他时区,按实际时差调整追加的小时数值即可。 - 第三步:选中公式单元格,将数字格式修改为「短日期」「长日期」或自定义的日期时间格式,即可得到可读的标准日期。
用你提供的示例值计算,最终得到的UTC时间为1970/1/1 00:00:12左右,北京时间为1970/1/1 08:00:12,符合时间戳取值逻辑。
高版本Excel(365/2021及以上)简便方案
高版本Excel支持64位大数运算,可以用LET函数简化公式,不需要手动拆分十六进制字符串:
- 直接将带
0x前缀的原始时间戳存入A1单元格,输入以下公式得到UTC时间:=LET(ts,HEX2DEC(SUBSTITUTE(A1,"0x","")),ts/864000000000 + DATE(1601,1,1)) - 同样根据需要追加时区偏移值,最后设置单元格为日期格式即可。
注意事项
- 不要直接套用Unix时间戳转换逻辑(从1970/1/1起算、秒/毫秒级计数),否则计算结果会出现数百年的偏差
- 如果公式计算后显示为5-6位的纯数字,是单元格格式未设置为日期导致的,手动调整数字格式即可正常显示
- 如果从Power BI导出数据时可以提前做字段类型转换,直接在Power BI里用
#datetime(1601,1,1,0,0,0) + #duration(0,0,0,时间戳值/10000000)的逻辑转换,效率会比在Excel里处理更高
内容的提问来源于stack exchange,提问作者user19421851
相关产品推荐
相关产品推荐

