PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Rails non converte il fuso orario (PostgreSQL)

Il tuo database sta memorizzando i tuoi timestamp in UTC (come dovrebbe). ActiveRecord sta apportando modifiche al fuso orario quando sa di avere un timestamp; quindi, quando dici questo:

puts Activity.first.starting_at

AR sa che starting_at è un timestamp, quindi crea un'istanza del timestamp come ActiveSupport::TimeWithZone istanza e quella classe applica la regolazione del fuso orario. Ma, quando dici questo:

select("date_trunc('day', activities.starting_at) as date ...

AR non analizzerà l'SQL per capire quel date_trunc restituirà un timestamp, AR non sa nemmeno cosa date_trunc significa. AR vedrà solo una stringa uscire dal database e te la consegnerà senza interpretazione. Sei libero di inviare quella stringa a ActiveSupport::TimeWithZone (o la tua lezione di gestione del tempo preferita) te stesso:non c'è niente di sbagliato nel dire ad AR cose che non sa e non può sapere da solo.

Rails è intelligente ma non è magico.