UTC Timestamp + Joda Time

Я пытаюсь получить UTC TimeStamp в простой Java-программе с использованием Joda:

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());
}

Вывод программы следующий:

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

Значение в миллисекундах - это правильное время UTC (т. Е. Подтверждено с помощьюGMT-4 часовой пояс) Второе значениеEST часовой пояс.

Что мне нужно, это значение UTC без изменений, какjava.sql.Timestamp (т.е. независимый от TZ), для записи в базу данных. Это возможно?

Редактировать 1
DateTime srcDateTime = date.toDateTime(srcTZ);

DateTime dstDateTime = srcDateTime.toDateTime(dstTZ);

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

я знаю этоsrcDateTime местная дата (GMT-4), иdstDateTime UTC (GMT-0). Выходные значения дат следующие:

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

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

Я попробовал все комбинации, чтобы попытаться получить значение UTCdstDateTime как 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()));

Вывод на печать для тестирования:

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

Первая строка печати - правильная метка времени UTC. Все, что мне нужно, это то же значение, что и тип java.sql.TimeStamp. Все, что я пробовал, всегда возвращало местное время машины.

Редактировать 2

Я попробовал следующее:

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

Вывод следующий:

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

Всякий раз, когда я пытаюсь преобразовать в TimeStamp, я теряю действительное значение UTC, которое мне нужно.

С точки зрения метода "параметры s:

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

Любая помощь очень ценится.

Ник.

Редактировать 3

Привет Мэтт,

Большое спасибо за ваш ответ. Мы получаем те же результаты, что и вы. Не знал, что такое печать и т. Д. Более конкретно:

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()));

Выходит:

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

Проблема была доведена до моего сведения, когда мы поняли, что БД хранит местное время вместо UTC:

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

Часовой пояс Mysql установлен на-00: 00'

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

Отладив приложение с помощью отладчика eclipse, мы поняли, что локальное время даты (2013-09-05 09: 51: 38.468) передается в БД (Can 'не размещать изображения, не хватает очков ...). Тип данных является прямым TimeStamp, без каких-либо манипуляций со строками. Может быть, отладчик затмения используетString.println() функционировать так же, не уверен ..

Я очень благодарен за помощь в отладке нашего приложения. Не хотел занимать столько времени (без каламбура) и усилий ...

С уважением,

Ник."