2013-07-16 18 views
5

Dlaczego istnieje różnica na znaczniki czasu w MySQL i MS SQL Server
MySQL:UNIX timestamp na MySQL i MSSQL Server

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

SQL Server:

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

i gdy próbuję dostać unix_timestamp
MySQL:

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

SQL Server:

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

Problem: istnieje różnica od 7200 sekund (2h)
Czy jest to problem strefa czasowa, czas serwera na obu serwerach są takie same, jak widać na now() i getdate()?

+0

Czy jesteś w strefie czasowej + 2 godz.? –

+0

UTC + 01: 00 Czas środkowoeuropejski – mirkobrankovic

+2

To pewnie to, plus DST. –

Odpowiedz

2

na SQL Server użytku

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

Tutaj

SYSDATETIMEOFFSET() zwraca czas systemowy lokalnego z lokalnej strefy czasowej przesunięcie umożliwiający konwersję do UTC. Zastąp go własnym polem datetimeoffset, jeśli chcesz coś innego niż aktualny czas.

4

Jest to dość długie rozwiązanie, ale wydaje się działać. Określa przesunięcie w strefach czasowych.

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

To jest świetne, ponieważ można go używać w dowolnej datetime, nie tylko "teraz". – nzn

1

Przepraszamy za spóźnioną odpowiedź, ale będzie to działać tylko w przypadku dat TERAZ. Jeśli musisz przeanalizować daty z przeszłości i masz np. różne strefy czasowe (lato/zima) to nie będzie działać poprawnie.