【问题标题】:iterate an array of strings and perform a regexp迭代字符串数组并执行正则表达式
【发布时间】:2011-07-23 00:11:19
【问题描述】:

给定一个 DateTime 字符串数组,我只想获取时间,例如10:30:00。 到目前为止,我想出了这个,但它不会给我正确的结果:

["2011-07-30 10:00:00","2011-07-30 12:00:00"].each{|item| item.match(/\d{2}:\d{2}:\d{2}/)}

【问题讨论】:

    标签: ruby regex arrays string datetime


    【解决方案1】:

    如果所有的字符串真的都是这样,那么只需做一些子字符串修改:

    a     = ["2011-07-30 10:00:00","2011-07-30 12:00:00"]
    times = a.map { |e| e[11,8] }
    

    如果您的时间戳包含 2011-07-30 10:00:00.11232011-07-30T10:00:002011-07-30 10:00:00 +0700 等内容,这也将起作用。

    如果你想对未来更友好,那么你可以这样做:

    off   = '9999-99-99 '.length
    len   = '99:99:99'.length
    times = a.map { |e| e[off, len] }
    

    所以没有人会猜到118 的含义。

    【讨论】:

      【解决方案2】:

      您可以使用来自 Ruby 的出色的 DateTime 库来实现相同的目标。

      require 'date'
      
      ["2011-07-30 10:00:00","2011-07-30 12:00:00"].map{|item|
        DateTime.parse(item).strftime("%H:%M:%S")
      }
       => ["10:00:00", "12:00:00"] 
      

      不过,穆的回答很棒。

      【讨论】:

      • +1 用于使用 ruby​​ DateTime lib,IMO 这个答案比重新发明轮子要好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多