CEST è il Central European Summer Time, ossia la nostra ora legale
(Central inteso in verticale, dalla Svezia all’Italia). Vale da marzo a
ottobre, poi si passa a CET.
In Rails
2.1.0 :003 > User.find(12666).created_at
User Load (18.5ms) SELECT “users”.* FROM “users” ORDER BY
“users”.“id” ASC LIMIT 1
=> Fri, 28 Mar 2014 15:06:46 CET +01:00
che è un giorno in cui non c’era ancora l’ora legale.
2.1.0 :006 > User.find(12266).update_attribute(:name, “Paolo”)
User Load (0.5ms) SELECT “users”.* FROM “users” WHERE “users”.“id” =
$1 LIMIT 1 [[“id”, 12266]]
(0.2ms) BEGIN
SQL (0.7ms) UPDATE “users” SET “name” = $1, “updated_at” = $2 WHERE
“users”.“id” = 12266 [[“name”, “Paolo”], [“updated_at”, Tue, 01 Apr
2014 09:08:14 CEST +02:00]]
E come vedi gestisce lui il cambio da CET a CEST.
Internamente (nel db) le date sono in UTC e poi è lo strato di
conversione in stringa di Rails a presentarle con la time zone giusta.
$ psql db
db=> select created_at,updated_at from users where id = 12266;
created_at | updated_at
----------------------------±---------------------------
2014-03-28 14:06:46.532646 | 2014-04-01 07:08:14.907614
(1 row)
Rails ha aggiunto a 07:08 le due ore necessarie a mostrare 09:08:14 CEST
+02:00
Quindi con Rails non mi preoccupo. Uso sempre UTC e converte lui le
date.
Tuttavia le time zone sono una fonte costante di grattacapi per noi
informatici. Credo che siano la cosa peggiore che ci possa capitare dopo
le stampe su carta. Per fortuna come avrete letto e sentito nei giorni
scorsi nelle news, i fusi orari saranno aboliti dal 2020 per iniziativa
ONU e si userà UTC in tutto il mondo. Hanno stimato un risparmio di 100
miliardi di dollari annuali su scala mondiale per i primi dieci anni, e
soprattutto ricordate che giorno è oggi
Paolo
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.