读取特定的时间格式并从中减去

时间:2012-09-20 20:08:26

标签: ruby

我正在研究我在互联网上发现的问题:

  

人体在夜间经历90分钟的睡眠周期,如果您在睡眠周期结束时醒来,感觉比在睡眠周期中醒来时更加清爽。面临的挑战是制定一个唤醒时间并输出可能时间的程序,以便您在睡眠周期结束时醒来。*

我解决这个问题的方法是在将其解析为DateTime并将其存储到数组中之后,将时间减去90米。但是,我是Rails的新手,我不太清楚如何做到这一点。如何以原始格式显示时间?

这是我到目前为止所做的:

require 'date'

def sleep_time time
  a = []

  5.times do |i|
    multiple = i * 90 * 60
    a << time - multiple
  end

  puts a
end

puts "Enter wake-up time: "
time = DateTime.strptime(gets, '%I:%M %p').to_time

puts time
sleep_time(time)

编辑:我想出了如何减去90米(使用秒)。

1 个答案:

答案 0 :(得分:1)

时间支持strftime,它采用与strptime一致的格式字符串。使用:

time.strftime('%I:%M %p')

例如:

Time.now.strftime('%I:%M %p')
=> "01:29 PM"

此外,不要将其解析为DateTime对象,然后使用to_time转换为Time对象。而是直接解析为Time对象。时间也支持strptime

require 'time'
Time.strptime('01:29 PM', '%I:%M %p')
=> 2012-09-20 13:29:00 -0700

如果要从给定格式解析,然后再次以该格式输出,请定义常量并在strptimestrftime方法中使用它:

TIME_FORMAT = '%I:%M %p'
Time.strptime('01:29 PM', TIME_FORMAT)
time.strftime(TIME_FORMAT)