Преобразуйте двухразрядный год в год из четырех знаков в Ruby

Я использую константу, были, я могу. Константа для параметров означает, что они не должны изменять свое значение. Это особенно ценно при передаче ссылкой. константа для функции объявляет, что функция не должна изменять участников классов.

7
задан Helder S Ribeiro 28 October 2009 в 19:46
поделиться

4 ответа

Выберите дату отсечения.

if year < cutoff, then year4 = "20" + year
else year4 = "19" + year

Также исправьте причину появления двузначного года, иначе ваша система не будет совместима с отсечкой 2000 + года.

5
ответ дан 7 December 2019 в 01:22
поделиться

Есть ли в этом смысл? Когда вы должны перестать рассматривать даты 19xx? Нет хорошего способа получить четырехзначный год из двух последних цифр года.

0
ответ дан 7 December 2019 в 01:22
поделиться

I don't know of such a component, and I don't know how you'd write one; how would it decide which two-digit prefix to use? Picking a single one blindly has certain demonstrated issues.

Depending on your application, you can probably find a reasonable heuristic to pick between 19 and 20 for a prefix, but the problem isn't solvable in general; there's not enough information.

0
ответ дан 7 December 2019 в 01:22
поделиться

Большинство лет, состоящих из двух цифр, уже в прошлом, так что хорошее отсечение для используется 30. Например, если кто-то набирает '66, они, скорее всего, означают 1966. Фактически, это также порог, который Excel использует, когда двузначная дата передается в ячейку даты.

У меня было приложение, которое принимались файлы с разделителями табуляцией из таблиц Excel, и они часто приходили с двузначным обозначением года. Я написал этот патч обезьяны ActiveRecord, чтобы позволить ActiveRecord обрабатывать двузначные годы для полей даты:

class ActiveRecord::ConnectionAdapters::Column
  class << self
    protected
    # If a year comes in with two digits, let's try to guess whether it's in the
    # 20th or 21st century.  Typically, Ruby pivots this decision around the
    # year '69, but this is a bad guess.  Since most of our dates will arrive in
    # two digit format because of an Excel import, we should use the same pivot
    # value that Excel uses.  Excel pivots the decision around the year '30
    # which seems to be a better guess anyway.
    def new_date_with_two_digit_year_support(year, mon, mday)
      year += 2000 if (0..29).include? year
      year += 1900 if (30..99).include? year
      new_date_without_two_digit_year_support(year, mon, mday)
    end
    alias_method_chain :new_date, :two_digit_year_support
  end
end

Это не совсем так типично, как то, о чем задан вопрос, но, надеюсь, это поможет.

4
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: