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 ServerDATEDIFF()
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, wieUNIX_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()
mitGETUTCDATE()
für ein bestimmtes Datum - Ich denke, eggyal oder spencer7593 erstellen sollte, eine Antwort, die es verursachen wird.
InformationsquelleAutor mirkobrankovic | 2013-07-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf SQL Server verwenden
select datediff(ss, '1970-01-01', SYSDATETIMEOFFSET() at time zone 'UTC')
Hier,
SYSDATETIMEOFFSET()
gibt die lokale Systemzeit mit dem local time zone offset ermöglicht die Konvertierung von UTC. Ersetzen Sie es mit Ihrem eigenendatetimeoffset
Feld, wenn Sie möchten etwas anderes als die aktuelle Zeit.Dies ist eine ziemlich lange Lösung, aber es scheint zu funktionieren. Es Konten für die offset-Zeit-Zonen.
Können Sie versuchen, diese Verknüpfung für das Verständnis der timestamp in Mysql
http://www.mysqltutorial.org/mysql-timestamp.aspx
für tsql-Zeitstempel Sie können sich diese links
http://www.informit.com/library/content.aspx?b=STY_Sql_Server_7&seqNum=97
http://technet.microsoft.com/en-us/library/ms188751(v=sql.110).aspx
Sorry für die späte Antwort, aber dies funktioniert nur für Termine JETZT. Wenn Sie haben, zu analysieren, Daten in die Vergangenheit, und Sie haben z.B. unterschiedliche Zeitzonen (Sommer/Winter), wird dieser nicht richtig funktioniert.