如何在Google Sheets中对超大数执行位右移?Discord雪花转时间戳求助
Discord雪花转Unix时间戳(Google Sheets 超2^48数值兼容方案)
问题原因
Google Sheets的BITRSHIFT函数仅支持**小于2^48(即281474976710656)**的输入值,但Discord雪花ID是17-18位的64位数字,远超这个阈值,因此直接调用BITRSHIFT会触发参数超限错误。
可行解决办法
方法1:用数学运算替代位右移
位右移22位等价于将数值除以2^22(即4194304)后取整数部分,因此可以用以下公式替代原方案:
=INT(A2 / 4194304) + 1420070400000
- 逻辑说明:Discord雪花的前42位是时间戳(相对于Discord纪元1420070400000),将整个ID除以2^22(舍去余数)即可提取这部分时间戳,再加上纪元偏移量得到标准Unix毫秒时间戳。
方法2:字符串格式兼容(避免科学计数法干扰)
如果你的雪花ID因为长度过长被自动转为科学计数法(比如显示为2.87134e+17),可以先处理单元格格式再计算:
- 选中存储雪花ID的单元格,右键选择「设置单元格格式」→ 选择「纯文本」。
- 使用公式提取有效数值并计算:
=INT(VALUE(A2) / 4194304) + 1420070400000
- 补充:如果科学计数法已经导致精度丢失,需要重新输入完整的雪花ID(纯文本格式下)才能保证计算准确。
验证示例
以雪花ID 287134013666099000 为例:
- 用方法1计算:
INT(287134013666099000 / 4194304) + 1420070400000 = 1481256013000 - 转换为北京时间对应2016-12-09 10:40:13,与Discord消息的实际时间一致。
内容的提问来源于stack exchange,提问作者absolutely not the the
相关产品推荐
相关产品推荐

