Имам привидно прост въпрос за noobie, но не мога да намеря отговора чрез Google. Имам масив от време (само час): ["08 AM", "09 AM", "07 AM", "11 AM", "03 PM", "12 PM"]
, Искам да направя друг масив, съдържащ всеки от тези времена плюс 1 час, така че той ще изведе: ["09 AM", "10 AM", "08 AM", "12 PM", "04 PM", "01 PM"]
Вероятно има прост начин да направите това, но другото би било да се справите с промяната от AM към PM, ако имам 11 AM, и да добавя час, за да получа 12 PM.
Отговори:
2 за отговор № 1Използва разбор на време и форматиране. require "time"
е необходимо за използване на Time.parse
метод.
require "time"
arr = ["08 AM", "09 AM", "07 AM", "11 AM", "03 PM", "12 PM"]
arr.map do |time|
time = Time.parse(time)
time += 60 * 60
time.strftime("%I %p")
end
# => ["09 AM", "10 AM", "08 AM", "12 PM", "04 PM", "01 PM"]
time += 60 * 60
добавя един час към времето, или 60 minutes x 60 seconds
.
time.strftime("%I %p")
форматира времето, използвайки тези директиви:
%I
- Час на деня, 12-часов часовник, подплатен с нула (01..12
)%p
- индикатор за меридиан, главни букви (AM
илиPM
)
Ако харесвате еднолинейни:
arr.map { |t| (Time.parse(t) + 3600).strftime("%I %p") }
1 за отговор № 2
Бихте могли да го направите така.
a = ["12 AM", *("01".."11").map { |a| "#{a} AM" },
"12 PM", *("01".."11").map { |a| "#{a} PM" }]
h = Hash[a.zip(a.rotate(1))]
#=> {"12 AM"=>"01 AM", "01 AM"=>"02 AM", "02 AM"=>"03 AM", "03 AM"=>"04 AM",
# "04 AM"=>"05 AM", "05 AM"=>"06 AM", "06 AM"=>"07 AM", "07 AM"=>"08 AM",
# "08 AM"=>"09 AM", "09 AM"=>"10 AM", "10 AM"=>"11 AM", "11 AM"=>"12 PM",
# "12 PM"=>"01 PM", "01 PM"=>"02 PM", "02 PM"=>"03 PM", "03 PM"=>"04 PM",
# "04 PM"=>"05 PM", "05 PM"=>"06 PM", "06 PM"=>"07 PM", "07 PM"=>"08 PM",
# "08 PM"=>"09 PM", "09 PM"=>"10 PM", "10 PM"=>"11 PM", "11 PM"=>"12 AM"}
ако
arr = ["08 AM", "09 AM", "07 AM", "11 AM", "03 PM", "12 PM"]
тогава
arr.map { |t| h[t] }
#=> ["09 AM", "10 AM", "08 AM", "12 PM", "04 PM", "01 PM"]
или
h.values_at(*arr)
#=> ["09 AM", "10 AM", "08 AM", "12 PM", "04 PM", "01 PM"]
0 за отговор № 3
1- use time.parse to parse your string to time object
2- add hour to your time object
3- convert it back to string using time.strftime