Я использую константу, были, я могу. Константа для параметров означает, что они не должны изменять свое значение. Это особенно ценно при передаче ссылкой. константа для функции объявляет, что функция не должна изменять участников классов.
Выберите дату отсечения.
if year < cutoff, then year4 = "20" + year
else year4 = "19" + year
Также исправьте причину появления двузначного года, иначе ваша система не будет совместима с отсечкой 2000 + года.
Есть ли в этом смысл? Когда вы должны перестать рассматривать даты 19xx? Нет хорошего способа получить четырехзначный год из двух последних цифр года.
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.
Большинство лет, состоящих из двух цифр, уже в прошлом, так что хорошее отсечение для используется 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
Это не совсем так типично, как то, о чем задан вопрос, но, надеюсь, это поможет.