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