Ruby Time.parse неправильно возвращает метку времени для String - PullRequest
4 голосов
/ 16 октября 2019

Я сталкиваюсь со странной ошибкой (?) В Ruby

Time.parse("David").to_i возвращает "нет информации о времени в" Дэвиде "`

Time.parse("David1").to_i возвращает "нет информации о времени в" David1"`

Однако

Time.parse("David10").to_i возвращает 1570654800

Кажется, что любая строка с более чем 2 числами в конце умудряется пройти преобразование Time в Ruby. Это ошибка?

Я пытаюсь создать единственный метод, который может обрабатывать преобразование строк в метки времени, где это уместно, или просто обратно в строки, если преобразование невозможно, но в тех случаях, когда моя строка содержит числа 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 Ответ

3 голосов
/ 16 октября 2019

Внутренне 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, он считается как год

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...