UTC-Zeitstempel + Joda-Zeit

Ich versuche, den UTC-Zeitstempel in einem einfachen Java-Programm mit Joda abzurufen:

public Timestamp getCurrentUTC(LocalDateTime date, DateTimeZone srcTZ, DateTimeZone dstTZ, Locale l) {
    DateTime srcDateTime = date.toDateTime(srcTZ);
    DateTime dstDateTime = srcDateTime.toDateTime(dstTZ);

    System.out.println("UTC Time:" + dstDateTime.getMillis());      
    System.out.println("UTC Time:" + new Timestamp(dstDateTime.getMillis()));

    return new Timestamp(dstDateTime.getMillis());
}

Die Ausgabe des Programms ist wie folgt:

UTC Time:1378265162047
UTC Time:2013-09-03 23:26:02.047

Der Millisekundenwert ist die korrekte UTC - Zeit (d. H. Bestätigt mitGMT-4 Zeitzone) Der zweite Wert ist derEST Zeitzone.

Was ich brauche, ist der UTC-Wert unverändert alsjava.sql.Timestamp (dh TZ-unabhängig), für ein Datenbankschreiben. Ist das möglich?

Bearbeiten 1
DateTime srcDateTime = date.toDateTime(srcTZ);

DateTime dstDateTime = srcDateTime.toDateTime(dstTZ);

System.out.println("UTC Time:" + dstDateTime.getMillis());

ich weiß dassrcDateTime ist das lokale Datum (GMT-4) unddstDateTime ist UTC (GMT-0). Die Ausgabewerte der Daten lauten wie folgt:

Source Date:2013-09-04T09:10:43.683-04:00

Destination Date: 2013-09-04T13:10:43.683Z

Ich habe alle Kombinationen ausprobiert, um den UTC-Wert von zu ermittelndstDateTime als java.sql.TimeStamp:

System.out.println("UTC Time:" + dstDateTime.getMillis());

System.out.println("UTC Time:" + new Timestamp(srcDateTime.toDateTime(DateTimeZone.UTC).getMillis()));

System.out.println("UTC Time:" + new Timestamp(dstDateTime.toDateTime(DateTimeZone.UTC).getMillis()));

Die Druckausgabe zum Testen:

UTC Time:1378298760226 - Correct UTC

UTC Time:2013-09-04 08:46:00.226 - Incorrect Local Date Time instead of the Expected UTC

UTC Time:2013-09-04 08:46:00.226 - Incorrect Local Date Time instead of the Expected UTC

Die erste Druckzeile enthält den korrekten UTC-Zeitstempel. Ich brauche nur den gleichen Wert wie java.sql.TimeStamp. Alles, was ich versuchte, gab immer das lokale Datum der Maschine zurück.

Bearbeiten 2

Ich habe folgendes versucht:

System.out.println("UTC Timestamp:" + date.toDateTime(srcTZ).getMillis());
System.out.println("UTC Timestamp:" + new Timestamp(date.toDateTime(srcTZ).getMillis()));

Die Ausgabe ist wie folgt:

UTC Time:1378342856315 - Correct UTC Time
UTC Timestap:2013-09-04 21:00:56.315 - Local Time other than the expected UTC Time

Immer wenn ich versuche, nach TimeStamp zu konvertieren, verliere ich den gültigen UTC-Wert, den ich verfolge.

In Bezug auf die Parameter der Methode:

srcTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Montreal")
dstTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("Etc/UTC"))
Local l = new Locale("en", "CA")

Jede Hilfe wird sehr geschätzt.

Nick.

Bearbeiten 3

Hallo Matt,

Vielen Dank für Ihre Antwort. Wir erzielen die gleichen Ergebnisse wie Sie. Wusste nicht, was es mit Drucken usw. auf sich hat. Genauer gesagt:

System.out.println("UTC Timestamp:" + srcDateTime.toDateTime(dstTZ).getMillis());
System.out.println("UTC Timestamp:" + srcDateTime.toDateTime(dstTZ));
System.out.println("UTC Timestamp:" + new Timestamp(srcDateTime.toDateTime(dstTZ).getMillis()));

Ergibt die Ausgabe:

UTC Timestamp:1378389098468 - Correct UTC Timestap (Thu, 05 Sep 2013 13:51:38 GMT)
UTC Timestamp:2013-09-05T13:51:38.468Z - Correct UTC Time
UTC Timestamp:2013-09-05 09:51:38.468 - Local time is printed, UTC is expected

Ich wurde auf das Problem aufmerksam, als wir feststellten, dass die Datenbank die Ortszeit anstelle von UTC speichert:

+---------------------+
| effectivedate       |
+---------------------+
| 2013-09-05 09:34:11 |
+---------------------+

Die MySQL-Zeitzone ist auf "-00: 00" eingestellt.

mysql> SELECT CURRENT_TIMESTAMP;
+---------------------+
| CURRENT_TIMESTAMP   |
+---------------------+
| 2013-09-05 13:48:09 |
+---------------------+

Beim Debuggen der Anwendung mit dem Eclipse-Debugger haben wir festgestellt, dass die lokale Datumszeit (2013-09-05 09: 51: 38.468) an die DB übergeben wurde (Bilder können nicht gepostet werden, nicht genügend Punkte ...). Der Datentyp ist ein direkter TimeStamp-Datentyp ohne Manipulation von Zeichenfolgen. Möglicherweise verwendet der Eclipse-DebuggerString.println() Funktion auch nicht sicher ..

Ich freue mich sehr über die Hilfe beim Debuggen unserer Anwendung. Wollte nicht so viel Zeit (kein Wortspiel beabsichtigt) und Mühe in Anspruch nehmen ...

Mit freundlichen Grüßen,

Nick.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage