Ruby的时差法

时间:2016-01-12 23:29:47

标签: ruby time command-line io

我的任务是构建一个简单的Ruby应用程序,它可以做两件事:

使用New命令注册新用户 用工作命令

显示它们的时差

它将用于办公楼,目的是跟踪工作总时数。

我也应该像这样从.txt文件中提取这些信息:

New Aaron
New Bertha
New Charles
Work  Bertha 06:30 11:12
Work  Bertha 12:03 16:17
Work  Charles 07:52 17:02

时间仅以分钟和小时表示。我认为没有人会在午夜过夜。这是让我感到困惑的部分,因为我在尝试找到工作时间的差异时遇到了很多麻烦,如预期的输出.txt文件中所示:

Aaron: 0 hours 0 minutes
Bertha: 8 hours 52 minutes
Charles: 9 hours 10 minutes

再次,我寻求帮助,找出每个人工作时间的差异。

任何和所有帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我建议您查看IO#readlines以阅读文本文件的内容。

一旦您能够使用每一行,您就可以使用String#split获取您想要抓取的信息,如下所示:

"Work  Bertha 06:30 11:12".split(' ')
#=> ["Work", "Bertha", "06:30", "11:12"]

然后你需要2个时间点之间的经过时间。 Ruby有time个对象,可以从字符串中解析时间,但会将日期设置为当前日期,这对您正在处理的事情不重要。

require 'time'
employee = ["Work", "Bertha", "06:30", "11:12"]
clock_in  = Time.parse(employee[2])
#=> 2016-01-12 06:30:00 -0600
clock_out = Time.parse(employee[3])
#=> 2016-01-12 11:12:00 -0600

可以减去时间对象以找到两者之间的时间变化。它会以秒为单位返回时间。您可以在有人进/出时加上所有秒数

clock_out - clock_in
#=> 16920.0

有很多方法可以使这更像人类可读的时间格式。我建议开始here