【问题标题】:How do I stop Time.parse from returning the current date when my string is empty?当我的字符串为空时,如何阻止 Time.parse 返回当前日期?
【发布时间】:2013-04-23 18:05:02
【问题描述】:

我有几个地方使用Time.parse(string).strftime("%m%d%Y") 来获取不同字符串的日期。

有时这些字符串可以为空''。当我使用 Time.parse 解析一个空字符串时,它会给出当前日期。

我需要一种方法来阻止这种情况发生并返回 '' 或什么都不返回。我的问题有解决方案吗?

require 'Time'
s = ''
Time.parse(s).strftime("%m%d%Y")
=> "04232013"

我正在使用 Ruby 1.8.7(2010-12-23 补丁级别 330)[i386-mingw32]

【问题讨论】:

    标签: ruby


    【解决方案1】:

    单独处理即可。

    def format_date s
      return if s.empty?
      Time.parse(s).strftime("%m%d%Y")
    end
    

    【讨论】:

    • s.empty? 是否更“Rubyish”?
    • 这取决于一个人的口味,我想。用你喜欢的。
    • @squiguy 是的 - 使用empty? 是更惯用的 ruby​​
    • return if s.empty? 将满足 OP 的要求和 Rubyistas :) 我的 +1。
    【解决方案2】:

    也许推荐的方式是

    Time.parse(s).strftime("%m%d%Y") unless s.empty?
    

    当条件不满足时,计算结果为nil

    【讨论】:

      【解决方案3】:
      require "time"
      s = '12/12/2013 05:23:11'
      p s.empty? ? '' : Time.parse(s).strftime("%m%d%Y") #=> "12122013"
      s = ''
      p s.empty? ? '' : Time.parse(s).strftime("%m%d%Y") #=> ""
      

      【讨论】:

      • 不需要三元,根据问题,“无”是可接受的返回值,条件可以,但 +1 是一个好的答案。
      • @iain 我回答了 OP 问的问题I need a way to stop this from happening and return '' or nothing. 谢谢你的补充 :)
      • 我知道,这就是你获得投票的原因。我只是一个“少即是多”的人(或学究!):D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多