You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PG::Interval优雅转换为Crystal-Lang的Time::Span?

将PostgreSQL的PG::Interval转换为Crystal的Time::Span(非正则方式)

你可以直接利用Crystal pg 库内置的转换能力,无需手动写正则解析:

方案1:查询时直接指定目标类型

pg 库支持在 query_all 中直接声明返回 Time::Span 类型,会自动完成 PG::Interval 到 Time::Span 的转换:

TimeChecker = NamedTuple(
  id: UUID,
  time_to_something: Time::Span, # 直接定义为目标类型
)

# 查询时指定返回类型为{UUID, Time::Span},库会自动转换
results = conn.query_all("select id,time_to_something from my_table", as: {UUID, Time::Span})

results.each do |id, time_to_something|
  time_checker = TimeChecker.new(
    id: id, 
    time_to_something: time_to_something # 无需额外处理
  )
end

方案2:手动转换单个PG::Interval实例

如果需要单独处理某个 PG::Interval 对象,直接调用内置的 #to_time_span 方法即可:

interval = PG::Interval.new("1 second")
span = interval.to_time_span # 得到等价于1.second的Time::Span实例

说明

pg 库内部已经实现了可靠的转换逻辑,会解析 PG::Interval 的年、月、日、时、分、秒等所有时间分量,映射到 Time::Span 的对应属性,比手动写正则更稳定且符合Crystal的语言习惯。

内容的提问来源于stack exchange,提问作者Tyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:26:01