ruby - temperatura - pronostico del tiempo en rubi barcelona
Manipulación de tiempo en rubí (4)
Quiero crear una instancia de DateTime que mienta 20 minutos y 10 segundos en el futuro. Intenté con Time y DateTime en irb, pero parece que no puedo encontrar una manera que realmente tenga sentido. Solo puedo agregar días a los objetos DateTime y solo agregar segundos a los objetos Time.
¿No hay una mejor manera de convertir siempre el tiempo que quiero agregar en segundos?
Bueno, la interfaz es simple y directa:
t = Time.now
t + (20 * 60 + 10)
Si desea tener algo conveniente, puede agregar métodos a la clase Time
:
class Time
def add_minutes(m)
self + (60 * m)
end
end
Pero no creo que esto sea más simple:
t = Time.now
t.add_minutes(20) + 10
Simplemente use las extensiones de tiempo de soporte activo. Son muy convenientes y menos propensos a errores que tratar de hacer esto a mano. Puede importar solo el módulo que necesita:
# gem ''activesupport''
require ''active_support/core_ext/numeric/time.rb''
DateTime.now + 20.minutes
NB: Sí, esto va en contra de la línea de parte de de mantenerse alejado de las bibliotecas de terceros, pero no debe evitar el uso de bibliotecas cuando son prácticamente estándar, reducir su riesgo significativamente y proporcionar una mejor claridad de código.
Suponiendo que ha requerido ActiveSupport o está trabajando en un proyecto de Rails. Una manera muy simple y legible de hacer esto en ruby es:
DateTime + 5.minutes
Time + 5.minutes
También funciona con .seconds, .hours, .days, .weeks, .month, .years
Un Time
es un número de segundos desde una época, mientras que un DateTime
es un número de días desde una época, por lo que agregar 1
a DateTime
agrega un día completo. Sin embargo, puede agregar fracciones de un día, por ejemplo
d = DateTime.now
d + Rational(10, 86400)
Agregará 10 segundos a d
(ya que hay 86400 segundos en un día).
Si está utilizando Rails, ActiveSupport agrega algunos métodos de ayuda y puede hacer
d + 20.minutes + 10.seconds
Lo que hará lo correcto es d
es un DateTime
o un Time
. Puede usar ActiveSupport por sí mismo, y en estos días puede obtener solo los bits que necesita. Me parece recordar que este material está en activesupport/duration
. Creo que hay algunas otras gemas que ofrecen ayuda con el manejo del tiempo también.