我试图添加存储在数据库中的小时和分钟,如下所示:
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)
。
答案 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