如何在Ruby中解析日/时/分/秒?[英] How to parse days/hours/minutes/seconds in ruby?

本文是小编为大家收集整理的关于如何在Ruby中解析日/时/分/秒?的处理方法,想解了如何在Ruby中解析日/时/分/秒?的问题怎么解决?如何在Ruby中解析日/时/分/秒?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

是否有 gem 或其他东西来解析诸如"4h 30m""1d 4h"之类的字符串 - 有点像 JIRA 或任务规划器中的估计值,也许是国际化的?

推荐答案

发布第二个答案,因为慢性(我的原始答案建议)不会给你时间跨度而是时间戳.

这是我的解析器.

class TimeParser
  TOKENS = {
    "m" => (60),
    "h" => (60 * 60),
    "d" => (60 * 60 * 24)
  }

  attr_reader :time

  def initialize(input)
    @input = input
    @time = 0
    parse
  end

  def parse
    @input.scan(/(\d+)(\w)/).each do |amount, measure|
      @time += amount.to_i * TOKENS[measure]
    end
  end
end

策略相当简单.将 "5h" 拆分为 ["5", "h"],定义 "h" 代表 (TOKENS) 的秒数,并将该数量添加到 @time.

TimeParser.new("1m").time
# => 60

TimeParser.new("1m wtf lol").time
# => 60

TimeParser.new("4h 30m").time
# => 16200

TimeParser.new("1d 4h").time
# => 100800

处理 "1.5h" 也不应该太难,代码库就是这么简单.

本文地址:https://www.itbaoku.cn/post/786598.html