Ruby Time.parse错误地返回String的时间戳

时间:2019-10-16 07:49:11

标签: ruby

我在Ruby中遇到一个奇怪的错误(?)

Time.parse("David").to_i返回“ David中没有时间信息”。

Time.parse("David1").to_i返回“ David1”中没有时间信息。

但是

Time.parse("David10").to_i返回1570654800

似乎任何末尾有2个以上数字的字符串都可以通过Ruby中的时间转换。这是错误吗?

我正在尝试创建一个方法,该方法可以处理相关的字符串到Timestamps的转换,或者如果无法进行转换,则可以简单地返回到字符串,但是对于我的字符串包含2个以上数字的情况,则失败

if value.is_a? String
  # if it's string of a date format
  begin
    Time.parse(value).to_i
  rescue StandardError => e
    value.downcase
  end
  # it's another object type - probably DateTime, Time or Date
else
  value.nil? ? 0 : value.to_f
end

1 个答案:

答案 0 :(得分:3)

内部time.rb使用,跟随

def parse(date, now=self.now)
  comp = !block_given?
  d = Date._parse(date, comp)
  year = d[:year]
  year = yield(year) if year && !comp
  make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
end

它过去常常以精度来解析日,月底的月份,如果是3则解析数字范围,它认为是年份