2011-05-07 14 views
5

que tiene una cadena de fecha 20101129220021, por lo que utilizaráRubí DateTime.Parse a la hora local

require 'date' 
d = DateTime.parse('20101129220021') 

Esta parte funciona bien, y me da una fecha, que es en UTC.

Mi pregunta es, ¿cómo puedo convertir esto a mi hora local? Intenté muchos métodos como extraer la parte de tiempo usando d.to_time y manipular el resultado, pero no funcionó. Por lo que yo sé, el objeto DateTime es inmutable. ¿Puedo obtener algo de ayuda?

+0

¿Qué espera? ¿Al mismo tiempo pero con la zona horaria igual a su hora local, o la hora UTC anterior convertida a su zona local? –

+0

Digamos que estás en UTC +0300, quieres 2010-11-29 22:00:21 +0300 o 2010-11-30 01:00:21 +0300. –

+0

Quiero el último para que pueda almacenar en la base de datos directamente sin la necesidad de convertir de nuevo. – cherhan

Respuesta

3

Es posible añadir una fracción racional basado en la zona horaria para obtener la hora local.

require 'date' 

# Make this whatever your zone is. Using UTC +0300 here. 
ZONE = 3 

d = DateTime.parse('20101129220021') + Rational(ZONE,24) 

d.to_s # => "2010-11-30T01:00:21+00:00" 
+0

Esto es para 1.8.X, si usa 1.9+, entonces la respuesta de nash es el camino a seguir. –

+0

Tengo un serio problema al instalar 1.9.2 en mi OSX ... Utilicé rvm, pero la versión no cambiará correctamente. – cherhan

4
irb(main):001:0> require "date" 
=> true 
irb(main):002:0> d = DateTime.parse('20101129220021') 
=> #<DateTime: 2010-11-29T22:00:21+00:00 (70719276007/28800,0/1,2299161)> 
irb(main):003:0> d.to_time 
=> 2010-11-30 00:00:21 +0200 

rubí 1.9.2p180 (2011-02-18)

+0

Estoy en OSX, por muchas razones no actualicé realmente a 1.9.2, por lo tanto, el comando anterior no funciona para mí, lo siento. Mi versión es ruby ​​1.8.7 (2010-12-23 patchlevel 330) [i686-darwin10] – cherhan

Cuestiones relacionadas