如何将Unix十六进制时间戳转换为Ruby DateTime格式
解决方案
无需引入额外第三方gem,使用Ruby原生语法即可完成转换,核心逻辑是先将十六进制格式的字符串转换为十进制的Unix秒级时间戳,再传入Time.at生成时间对象即可。
基础实现(纯Ruby环境)
# 输入的十六进制时间戳字符串 hex_timestamp = '6132103D' # 十六进制转十进制Unix时间戳 unix_timestamp = hex_timestamp.to_i(16) # 生成本地时间对象 result_time = Time.at(unix_timestamp) # 格式化为指定字符串格式 formatted_result = result_time.strftime("%A, %B %-d, %Y %-l:%M:%S %p") # 输出结果为:Friday, September 3, 2021 12:08:29 PM,和预期一致
如果需要生成UTC时间,只需调用.utc方法即可:
utc_time = Time.at(unix_timestamp).utc
Rails环境适配
如果你在Rails项目中使用,可以直接调用时区适配方法,和你项目配置的时区自动对齐:
rails_time = Time.zone.at(hex_timestamp.to_i(16))
补充说明
- 如果后续拿到的十六进制时间戳带
0x前缀,to_i(16)方法也可以自动识别处理,不需要额外做字符串裁剪。 - 如果返回的是毫秒级的十六进制时间戳,将转换得到的十进制数值除以1000后再传入
Time.at即可。
内容的提问来源于stack exchange,提问作者Vladislav Yuryev
相关产品推荐
相关产品推荐

