2013-08-16 12 views
18

Come posso ottenereMysql FROM_UNIXTIME come UTC

FROM_UNIXTIME 

come UTC/GMT in MySQL? La data viene restituita nel fuso orario della connessione.

Non voglio modificare il fuso orario della connessione.

risposta

15

Si sarebbe meglio impostare il fuso orario prima del tempo:

SET time_zone='UTC'; 
select FROM_UNIXTIME(1277942400); 

Il motivo è che le conversioni che coinvolgono un fuso orario locale possono essere perdite. V'è un esempio di questo nel docs here (vedere il 4 ° comma, sotto la sezione UNIX_TIMESTAMP() inizia con "Nota:")

+0

'SET time_zone = '+00: 00'' ha funzionato per me. Vedi la risposta di Mārtiņš Radiņš se vuoi che venga preservata. – lepe

12

la mia soluzione era

SELECT CONVERT_TZ(FROM_UNIXTIME(1277942400), @@session.time_zone,'UTC') 

se CONVERT_TZ restituisce null, assicurarsi che la tabella di fuso orario di mysql è piena:

zypper install mysql-community-server-tools 
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql 
+0

Mi piace l'apolidia della soluzione – Erbureth

+0

Che una grande soluzione :) –

+1

è senza stato, ma non riesce con date ambigue, come conver_ttz non può conoscere il offset fuso orario del timestamp sorgente. –

1

So che questo è stato risposto, ma ancora mi piacerebbe contribuire:

Se non è il tuo server a produrre il fuso orario UTC con funzioni come NOW() e FROM_UNIXTIME() ecc., devi impostare il time_zone come ha detto @Matt Johnson.

C'è una cosa che non ha menzionato: SET time_zone = timezone; imposta solo il fuso orario per la connessione corrente. Utilizzare SET GLOBAL time_zone = '+00:00' se si desidera che queste funzioni restituiscano/convertano le date in UTC per impostazione predefinita in modo da non dover impostare il fuso orario ogni volta che si desidera salvare alcune date basate su UTC.

Verifica le impostazioni correnti TIME_ZONE: SELECT @@global.time_zone, @@session.time_zone;

MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support