UNIX-timestamp in MySQL und MSSQL Server

Kommen, wie es einen Unterschied gibt, auf timestamps in mysql und MS SQL-Server

MySQL:

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

SQL Server:

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

wenn ich versuche, zu bekommen 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: es ist ein Unterschied von 7200 Sekunden (2h)

Ist das ein Zeit-Zone, problem, Zeit-server auf beiden Servern sind die selben, wie auf gesehen now() und getdate()?

  • Sind Sie in der +2h-Zeitzone ?
  • UTC+01:00 Mitteleuropäische Zeit
  • Dann ist es wahrscheinlich, plus Sommerzeit.
  • MySQL UNIX_TIMESTAMP() gibt die Sekunden seit der UNIX-Epoche (1970-01-01 00:00:00 UTC). SQL Server DATEDIFF() auf Literale in der session-Zeitzone, die UTC-offset von einer Stunde plus das Tageslicht Einsparungen Anpassung, die sich zwischen den Operanden-Daten von Januar und Juli.
  • Oh danke beiden, @Bart Friederichs und @eggyal, so ist es ein Weg, zu ändern DATEDIFF() zu bekommen UTC-Zeitstempel, wie UNIX_TIMESTAMP()?
  • Ich Stimme mit eggyal. Nur um zu klären, MySQL interpretiert, dass die Datum-literal mit Hilfe der Zeitzone der session (SHOW VARIABLES LIKE '%Zeitzone%") und grundsätzlich die Umwandlung, die äquivalente DATETIME in UTC, und dann immer die Differenz in Sekunden zwischen diesem und dem Beginn der Epoche (Januar 1, 1970 Mitternacht UTC). SQL-Server-computing ist der Unterschied mithilfe der SQL Server-Zeitzone settin. Beide Ergebnisse sind "richtig", entsprechend der Spezifikation jeder hält.
  • Auf dem server verwenden GETUTCDATE() auf client-Computer anzeigen von Datum / Uhrzeit mit Zeitzone offset.
  • jetzt nur noch zu kombinieren DATEDIFF() mit GETUTCDATE() für ein bestimmtes Datum
  • Ich denke, eggyal oder spencer7593 erstellen sollte, eine Antwort, die es verursachen wird.

Schreibe einen Kommentar