Ruby: математические функции для значений времени - PullRequest
3 голосов
/ 11 января 2009

Как мне добавить / вычесть / и т.д. значения времени в рубине? Например, как бы я добавил следующие времена?

00: 00: 59 + 00:01:43 + 00:20:15 =?

Ответы [ 4 ]

1 голос
/ 03 апреля 2013

Используйте ActiveSupport, который имеет множество встроенных расширений даты.

require 'active_support/core_ext'
t1 = "#{Date.today} 00:00:59".to_time
t2 = "#{Date.today} 00:01:43".to_time
t3 = "#{Date.today} 00:20:15".to_time
t1.since(t2.seconds_since_midnight+t3.seconds_since_midnight)

или, если вас не интересует дата, только время:

t1.since(t2.seconds_since_midnight+t3.seconds_since_midnight).strftime("%H:%M:%S")

Для получения полного списка, проверьте http://guides.rubyonrails.org/active_support_core_extensions.html#extensions-to-date

0 голосов
/ 09 июля 2012

Один из способов - преобразовать все в секунды, а затем выполнить операции ... Затем вам потребуется снова преобразовать его в объект времени с

Time.at(seconds_result).strftime('%H:%M:%S')

И вы получите время, красиво отформатированное (в виде строки).

Я пытаюсь найти камень, который делает это и другие операции.

0 голосов
/ 03 апреля 2013

Вы, вероятно, хотите использовать драгоценный камень, который не имеет отношения к фактическому дню. Вы можете выполнять акробатику, используя DateTime и или Time, но вы постоянно будете бороться с тем, как обрабатывать дни.

Один драгоценный камень, который может быть полезен, это tod (TimeOfDay), https://github.com/JackC/tod

С этим вы можете напрямую выполнить TimeOfDay.parse "00:01:43", добавить значения и распечатать результат, используя strftime ("% H:% M:% S").

0 голосов
/ 30 мая 2012

Довольно уродливо, но вы можете использовать DateTime.parse (each_interval) и рассчитать количество секунд в каждом. Как это:

require 'date'

def calc_seconds(time_string)
  date_time = DateTime.parse(time_string)
  hour_part = date_time.hour * 60 * 60
  minute_part = date_time.minute * 60
  second_part = date_time.second
  hour_part + minute_part + second_part
end

... который дает вам ваш результат в секундах, при условии допустимых входных данных. В этот момент вы можете добавить их вместе.

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

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

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