2013-07-16 13 views
5

Come mai c'è una differenza il timestamp in MySQL e MS SQL Server
MySQL:UNIX timestamp su MySQL e MSSQL Server

select now() result: 2013-07-16 08:49:26.0 

SQL Server:

select getdate() result: 2013-07-16 08:48:16.47 

e quando provo a ottenere unix_timestamp
MySQL:

SELECT UNIX_TIMESTAMP('2013-07-01') result: 1372629600 

SQL Server:

SELECT DATEDIFF(SECOND,'1970-01-01', '2013-07-01') result 1372636800 

problema: c'è una differenza di 7200 secondi (2h)
È questo un problema fuso orario, server su entrambi i server sono gli stessi visto su now() e getdate()?

+0

Sei nel fuso orario + 2h? –

+0

UTC + 01: 00 Ora dell'Europa centrale – mirkobrankovic

+2

Quindi probabilmente lo è, più ora legale. –

risposta

2

Su uso di SQL Server

select datediff(ss, '1970-01-01', SYSDATETIMEOFFSET() at time zone 'UTC')

Qui,

SYSDATETIMEOFFSET() restituisce l'ora del sistema locale con il fuso orario locale di offset consentendo la conversione in UTC. Sostituiscilo con il tuo campo datetimeoffset se desideri qualcosa di diverso dall'ora corrente.

4

Questo è piuttosto una soluzione lunga ma sembra funzionare. Rappresenta l'offset nei fusi orari.

SELECT DATEDIFF(SECOND, DATEADD(SECOND, DATEDIFF(SECOND, GETUTCDATE(), GETDATE()), '1970-01-01'), '2013-07-01') 
+0

Questo è fantastico perché puoi usarlo per qualsiasi datetime non solo "adesso". – nzn

1

Siamo spiacenti per la risposta in ritardo, ma questo funzionerà solo per le date ADESSO. Se devi analizzare le date in passato e ad es. diversi fusi orari (estate/inverno) questo non funzionerà correttamente.