如何添加存储为字符串的小时和分钟

时间:2018-09-27 05:58:21

标签: ruby-on-rails ruby

我试图添加存储在数据库中的小时和分钟,如下所示:

BottomAppBar bar = (BottomAppBar) findViewById(R.id.bar);
setSupportActionBar(bar);

bar.setNavigationOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // Handle the navigation click by showing a BottomDrawer etc.
    }
});

bar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        // Handle actions based on the menu item
        return true;
    }
});

+----+---------+-------+ | id | user_id | time | +----+---------+-------+ | 1 | 4 | 03:15 | | 2 | 4 | 02:22 | +----+---------+-------+ 字段是time。如何添加由string之类的字符串表示的小时和分钟?

我尝试过

05:37

但输出仅为current_user.table.pluck(:time).sum(&:to_f)

2 个答案:

答案 0 :(得分:9)

如果您将表中的时间读入数组,则会得到类似的结果

arr = ["03:15", "02:22"]

然后您可以写

arr.sum do |s|
  h, m = s.split(':').map(&:to_i)
  60*h + m
end.divmod(60).join(':')
  #=> "5:37"

请参见Array#sum(在MRI v2.4中引入)和Integer#divmod。要支持2.4之前的Ruby版本,请使用Enumerable#reduce代替Array#sum

这三个步骤如下。

mins = arr.sum do |s|
  h, m = s.split(':').map(&:to_i)
  60*h + m
end
  #=> 337
hm = mins.divmod(60)
  #=> [5, 37]
hm.join(':')
  #=> "5:37"

答案 1 :(得分:6)

请检查以下关于红宝石的求和时间示例:

require 'time'

t = Time.parse("3:15")
puts t.strftime("%H:%M")

t2 = Time.parse("02:22")
puts t2.strftime("%H:%M")
t3 = t.to_i + t2.to_i

puts Time.at(t3).utc.strftime("%H:%M")

这是24小时范围内的快速时间总和。对于每种情况的正确解决方案,请检查上面的@Cary代码。

这是一个由@Cary代码示例制成的小型Ruby Gem,它使用方法sum_strings扩展了Ruby Array类,例如:

宝石https://github.com/nezirz/sum_strings/

使用Gem的示例项目:https://github.com/nezirz/use_sum_strings