0

私はインターネットで見つけた問題に取り組んでいます:

人体は夜間に90分の睡眠サイクルを経ており、睡眠サイクルの最後に目覚めた方が、睡眠サイクル中に目覚めた場合よりも気分がすっきりします。課題は、起床時間を取り、睡眠に入る可能性のある時間を出力して、睡眠サイクルの終わりに起床するようにするプログラムを作成することです。*

DateTimeこの問題への私のアプローチは、それを解析して配列に格納した後、5回時間から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)

編集:90mを引く方法を理解しました(秒を使用)。

4

2 に答える 2

1

Timeはstrftime、と一致するフォーマット文字列をとるをサポートしstrptimeます。使用する:

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

例えば:

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

また、それをDateTimeオブジェクトに解析してから、を使用してTimeオブジェクトに変換しないでくださいto_time。代わりに、Timeオブジェクトに直接解析します。時間strptimeもサポートします:

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

特定の形式から解析する場合は、その形式で再度出力し、定数を定義して、strptimeおよびstrftimeメソッドで使用します。

TIME_FORMAT = '%I:%M %p'
Time.strptime('01:29 PM', TIME_FORMAT)
time.strftime(TIME_FORMAT)
于 2012-09-20T20:29:07.277 に答える
0

ActiveSupport Extensionsを使用する場合は、を使用できます1.day + 90.minutes - 10.secondsあなたはここでそれを見つけます。

# 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."

無数のソリューションの1つだけ:-D

于 2012-09-20T21:15:10.847 に答える