Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 读取特定时间格式并从中减去_Ruby - Fatal编程技术网

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

Ruby 读取特定时间格式并从中减去,ruby,Ruby,我正在处理我在互联网上发现的一个问题: 人体在夜间会经历90分钟的睡眠周期,如果你在睡眠周期结束时醒来,你会比在睡眠周期中醒来时感觉更清新。挑战在于制作一个需要唤醒时间的程序,并输出可能的入睡时间,以便在睡眠周期结束时醒来* 我解决这个问题的方法是在将时间解析为DateTime并将其存储到数组中之后,将时间减去90m五次。然而,我对Rails还不熟悉,不太确定如何做到这一点。如何以原始格式显示时间 以下是我到目前为止的情况: require 'date' def sleep_time time

我正在处理我在互联网上发现的一个问题:

人体在夜间会经历90分钟的睡眠周期,如果你在睡眠周期结束时醒来,你会比在睡眠周期中醒来时感觉更清新。挑战在于制作一个需要唤醒时间的程序,并输出可能的入睡时间,以便在睡眠周期结束时醒来*

我解决这个问题的方法是在将时间解析为
DateTime
并将其存储到数组中之后,将时间减去90m五次。然而,我对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)
需要“日期”
def睡眠时间
a=[]
5.3倍于我|
倍数=i*90*60

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

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

Time.now.strftime('%I:%M %p')
=> "01:29 PM"
另外,不要将其解析为DateTime对象,然后使用
转换为时间对象。而是直接解析为时间对象。时间支持strtime

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

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

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

如果使用ActiveSupport扩展,则可以使用
1.day+90.minutes-10.seconds
。你找到了

#ActiveSupport Extensions将允许我们使用90.5分钟
需要“主动支持/全部”
def go_to_sleep_at(结束时间,睡眠周期=5)
#将输入解析为时间对象
end\u time=time.parse(end\u time)
#加一天
如果结束时间已过,则结束时间+=1天?
#计算开始时间
开始时间=[]
(1.睡眠周期)。每个{i |开始|次“如果你想在早上6:00醒来,你可以在晚上22:30、上午00:00、上午01:30、上午03:00或凌晨04:30入睡。”
只是众多解决方案中的一个:-D

# ActiveSupport Extensions will us allow to use 90.minutes
require 'active_support/all'

def go_to_sleep_at(end_time, sleep_cycles = 5)
  # Parse input into time object
  end_time = Time.parse(end_time)
  # Add one day
  end_time += 1.day if end_time.past?

  # Calculate start times
  start_times = []
  (1..sleep_cycles).each {|i| start_times << end_time - (90.minutes * i)}

  # Define output format
  time_format = '%H:%M %p'

  # Format times
  end_time = end_time.strftime(time_format)
  start_times.map!{|t| t.strftime(time_format)}.reverse!

  # Return output
  return "If you want to wake up at #{ end_time } you can go to sleep at #{start_times[0..-2].join(', ')} or #{start_times.last}."
end

p go_to_sleep_at('06:00')
# => "If you want to wake up at 06:00 AM you can go to sleep at 22:30 PM, 00:00 AM, 01:30 AM, 03:00 AM or 04:30 AM."