UTC Timestamp + Joda Time

Eu estou tentando obter o UTC TimeStamp em um programa Java simples usando o 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());
}

A saída do programa é a seguinte:

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

O valor em milissegundos é o horário UTC correto (isto é, confirmado comGMT-4 fuso horário) O segundo valor é oEST fuso horário.

O que eu preciso é o valor UTC inalterado comojava.sql.Timestamp (ou seja, independente de TZ), para uma gravação de banco de dados. Isso é possível?

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

DateTime dstDateTime = srcDateTime.toDateTime(dstTZ);

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

Eu sei dissosrcDateTime é a data local (GMT-4) edstDateTime é UTC (GMT-0). Os valores de saída das datas são os seguintes:

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

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

Eu tentei todas as combinações para tentar obter o valor UTC dedstDateTime como um 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()));

A saída de impressão para teste:

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

A primeira linha de impressão é o carimbo de hora UTC correto. Tudo o que preciso é o mesmo valor do tipo java.sql.TimeStamp. Qualquer coisa que eu tentei sempre retornou a data e hora local da máquina.

Editar 2

Eu tentei o seguinte:

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

A saída é a seguinte:

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

Sempre que tento converter para o TimeStamp, perco o valor UTC válido que estou depois.

Em termos dos parâmetros do método:

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

Qualquer ajuda é muito apreciada.

Usuario.

Editar 3

Olá Matt

Muito obrigado pela sua resposta. Estamos obtendo os mesmos resultados que você. Não sabia a coisa sobre a impressão, etc .. Mais especificamente:

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

Rende a saída:

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

O problema foi trazido à minha atenção quando percebemos que o DB estava armazenando a hora local em vez de UTC:

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

O fuso horário do Mysql está definido como "-00: 00"

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

Depurando o aplicativo usando o debugger eclipse, percebemos que o tempo de data local (2013-09-05 09: 51: 38.468) estava sendo passado para o banco de dados (não é possível postar imagens, pontos insuficientes ...). O tipo de dados é o TimeStamp direto, sem manipulação de string. Talvez o depurador do eclipse esteja usandoString.println() funcionar bem, não tenho certeza ..

Eu realmente aprecio toda a ajuda na depuração de nosso aplicativo. Não queria levar tanto tempo (sem trocadilhos) e esforço ...

Atenciosamente,

Usuario.

questionAnswers(5)

yourAnswerToTheQuestion