2012-06-19 13 views
11

En C# hay una clase TimeSpan. Representa un período de tiempo y se devuelve desde muchas opciones de manipulación de fechas. Puede crear uno y sumar o restar de una fecha, etc.¿Tiene Ruby un equivalente a TimeSpan en C#?

En Ruby y específicamente en los rieles parece que hay muchas clases de fecha y hora pero nada que represente un lapso de tiempo?

Lo ideal es que me guste un objeto que pueda usar para generar fechas formateadas con las opciones de formato de fecha estándar.

por ejemplo.

ts.to_format("%H%M") 

¿Existe tal clase?

Aún mejor sería si podía hacer algo como

ts = end_date - start_date 

Soy consciente de que resta de dos fechas resultados en el número de segundos que separan dijo fechas y que podía trabajar todo de eso.

Respuesta

1

Al final me bifurcadas la sugerencia de respuesta de @ tokland. No estoy seguro de cómo hacer que una joya adecuada pero, actualmente, funciona para mí:

Timespan fork of time_diff

+0

Los videntes anónimos son cojos. – toxaq

6

Usted puede hacer algo similar como esto:

irb(main):001:0> require 'time'   => true 
irb(main):002:0> initial = Time.now  => Tue Jun 19 08:19:56 -0400 2012 
irb(main):003:0> later = Time.now  => Tue Jun 19 08:20:05 -0400 2012 
irb(main):004:0> span = later - initial => 8.393871 
irb(main):005:0> 

Esto sólo devuelve el tiempo en segundos que no es todo lo que agradable a la vista, puede utilizar la función strftime() para que se vea bonito:

irb(main):010:0> Time.at(span).gmtime.strftime("%H:%M:%S") => "00:00:08" 
+0

Esto pasa a ser exactamente lo que estoy haciendo en este momento. Tiene la limitación de no poder mostrar más de 24 horas de diferencia de tiempo. – toxaq

+0

@toxaq The Time es en realidad una abstracción de fechas y horas, lo que puede ser confuso dado el nombre. Puede hacer objetos de Tiempo para un Año/Mes/Día/Hora/Minuto/Segundo y realizar sumas y restas en ellos. http://www.ruby-doc.org/core-1.9.3/Time.html –

+0

Sin embargo, eso es lo interesante de un intervalo de tiempo, no tiene ningún concepto de su lugar en referencia a otra cosa. Es simplemente una int glorified con algunos métodos de acceso agradables. – toxaq

1

No, no es así. Solo puede agregar segundos o usar el método advance.

end_date - start_date tendrá Float tipo

3

Algo como esto? https://github.com/abhidsm/time_diff

require 'time_diff' 
time_diff_components = Time.diff(start_date_time, end_date_time) 
+0

Eso se ve realmente interesante gracias. No es exactamente lo que quería, pero definitivamente puedo trabajar con él o con una derivación. – toxaq

0

Todavía no @toxaq ... pero he comenzado algo!

https://gist.github.com/thatandyrose/6180560

class TimeSpan 
attr_accessor :milliseconds 

def self.from_milliseconds(milliseconds) 
    me = TimeSpan.new 
    me.milliseconds = milliseconds 
    return me 
end 

def self.from_seconds(seconds) 
    TimeSpan.from_milliseconds(seconds.to_d * 1000) 
end 

def self.from_minutes(minutes) 
    TimeSpan.from_milliseconds(minutes.to_d * 60000) 
end 

def self.from_hours(hours) 
    TimeSpan.from_milliseconds(hours.to_d * 3600000) 
end 

def self.from_days(days) 
    TimeSpan.from_milliseconds(days.to_d * 86400000) 
end 

def self.from_years(years) 
    TimeSpan.from_days(years.to_d * 365.242) 
end 

def self.diff(start_date_time, end_date_time) 
    TimeSpan.from_seconds(end_date_time - start_date_time) 
end 

def seconds 
    self.milliseconds.to_d * 0.001 
end 

def minutes 
    self.seconds.to_d * 0.0166667 
end 

def hours 
    self.minutes.to_d * 0.0166667 
end 

def days 
    self.hours.to_d * 0.0416667 
end 

def years 
    self.days.to_d * 0.00273791 
end 
end 
+0

Genial, muy similar a lo que está sucediendo en la gema tokland sugerida, que bifurqué para obtener lo que quería que sucediera. – toxaq

Cuestiones relacionadas