2012-01-05 6 views
5

Me encuentro con lo que a mí me parece un problema simple, pero no puedo entender lo que estoy haciendo mal. En mi aplicación, los usuarios pueden agregar su curso a través de un form_for simple. Pueden entrar en un hora_inicial y hora_final para las conferencias del curso, así:time_select form helper interpreta el nuevo objeto de hora como UTC no como zona horaria configurada

<div class="field"> 
    Start Time<br /> 
    <%= time_select :course, :start_time, { :minute_step => 5, :ampm => true } %> 
</div> 

<div class="field"> 
    End Time<br /> 
    <%= time_select :course, :end_time, { :minute_step => 5, :ampm => true } %> 
</div> 

he configurado mi zona horaria en la que se fijará application.rb a tiempo del este y esto parece que funciona correctamente como created_at se devuelve en la derecha zona horaria.

Sin embargo, el problema que estoy enfrentando es que start_time y end_time se ingresan como UTC en la base de datos. Por lo tanto, cuando un usuario selecciona una clase para comenzar a las 10 a. M., Se ingresa como 10 UTC, no como 10 AM EST/15:00 UTC. ¿Que me estoy perdiendo aqui? Parece que lo que quiero que pase debería ser posible.

+0

Quizás esto te ayude: http://stackoverflow.com/questions/4362663/timezone-with-rails-3 –

+0

De hecho, creo que tengo el problema opuesto. My start_time y end_time no se guardan dentro de la zona horaria, pero se guardan como hora UTC. –

+2

Nunca he usado un time_select pero siempre un datetime_select cuando trato con zonas horarias, tal vez esto podría ser un problema, pero parece bastante improbable. –

Respuesta

2

Resumiendo la respuesta de los comentarios con el fin de eliminar esta pregunta del filtro "sin respuesta":

sugerido por Tim Brandes:

Tal vez esto le ayuda a: Timezone with rails 3 ... nunca he utilizado un time_select pero siempre un datetime_select cuando se trata de zonas horarias, tal vez esto podría ser un problema, pero parece bastante improbable.

solución que funcionó para Philip V:

Mi hora_inicial y hora_final no están siendo guardados dentro de la zona horaria, pero guardan como un tiempo UTC. ... Cambié el tipo de columna para start_time y end_time a datetime y esto solucionó los problemas que tenía. Supongo que las columnas de tiempo solo permiten UTC.

0

Estaba luchando con el mismo problema. Pero luego me di cuenta de que no necesitaba la información de la zona horaria del objeto Time.

Como usted ha dicho, las bases de datos almacena como UTC, pero lo realmente importante que tenemos que hacer con estos datos es:

course.start_time.hour 
course.start_time.min 

Ésta es la zona horaria independiente. (8 horas son 8 horas desde la medianoche, sin importar la medianoche que comparas. 30 minutos son 30 minutos desde el minuto 0 de la hora. No importa en qué zona horaria estés usando esa hora).

Por lo tanto, en la mayoría de las aplicaciones donde se requiere una estructura de almacenamiento Time, desea saber cuándo comienza o termina un evento recurrente, para almacenar el valor de un temporizador o el tiempo de una vuelta en una carrera , puede usar la Hora UTC que la base de datos devuelve sin ningún problema.

Cuestiones relacionadas