Я ищу краткий способ получить объект Ruby Time
, представляющий вершину следующей минуты (и час / день / месяц / год, если это возможно).Я хочу, чтобы это работало в чистой среде Ruby, поэтому функция Rails Time.change
или аналогичная не подходит.
Сначала это кажется простым - просто добавьте 1 к Time.now
, но естьВ крайних случаях, когда, например, если вы пытаетесь создать экземпляр объекта Time
с Time.now.min + 1
, когда текущая минута равна 59, вы получите ArgumentError: min out of range
.Это относится и к часам, дням и месяцам.
У меня есть длинный код, который выполняет эту работу.Это некрасиво, но я просто экспериментирую:
def add_minute
now = Time.local
year = now.year
month = now.month
day = now.day
hour = now.hour
min = now.min
if now.min == 59
if now.hour == 23
if now.day == Date.civil(now.year, now.month, -1).day
if month == 12
year = year + 1
month = 1
day = 1
hour = 0
min = 0
else
month = now.month + 1
day = 1
hour = 0
min = 0
end
else
day = now.day + 1
hour = 0
min = 0
end
else
hour = now.hour + 1
min = 0
end
else
min = now.min + 1
end
Time.local year, month, day, hour, min, 0
end
Это кажется нелепо многословным для того, что кажется простым или встроенным заданием, но я не нашел нативного решения Ruby.Существует ли один?