Minhas conclusões até agora:
Bem a data e a hora do Delphi ficam num TDateTime, que é um apelido para o tipo Double (8 bytes). Ele armazena o número de dias passados desde 30/12/1899, indo para valores negativos e positivos, observando-se os valores limites já citados. E também pode admitir valores fracionários, de modo que a data 30/12/1899 12h:0min:0s:0ms é representada como 0,5. A parte fracionária então representa as horas, minutos, segundos e milissegundos, ocupando para isso uma faixa de 8 dígitos na base 10, de modo que a data 30/12/1899 23h:59min:59s:999ms é representada por 0,99999999).
Parêntesis: por isso a data máxima limite indicada acima como 31/12/9999 11:59:59.999 na verdade é representada pelo valor 2958465.999999[color=red]99[/color] e não 2958465.999999, que na verdade representa a data 31/12/9999 11:59:59.136 (136 milissegundos e não 999).
Bem descobri essas coisas olhando o código das funções EncodeDate e EncodeTime, que pegam valores separados de ano/mês/dia e hora/minuto/segundo/milissegundo, respectivamente, e transformam num TDateTime cada uma, bastando somar os dois valores para obter a representação conjunta de data e hora.
Tal representação é como a do Java, só que este usa um inteiro (long) de se não me engano 8 bytes também, que representa os milisegundos desde 1/1/1970 (isso tem a ver com Unix) enquanto que TDateTime representa dias desde 30/12/1899, e de modo fracionário, o que permite também reepresentar os milissegundos.
Bem se eu não achar algo pronto, vou ter que implementar essas funções EncodeDate e EncodeTime em Java, adaptando o algoritmo usado. E também terei que adaptar as funções contrárias, de decodificação, já que fazemos consultas no banco de dados pelo Java. Bem se tiver que fazer isso provavelmente vou usar o GregorianCalendar ou então o Joda-time que o Quirino indicou. Aliás procurei e não achei nada na documentação dessa ferramenta sobre converter para esse formato do Delphi ou qualquer outro. Mas minha impressão é que ela é uma boa biblioteca para trabalhar. Bem, ela diz que a API de datas do Java é lenta e ineficiente.
PS: no meu micro o long zero é retornado pela classe java.util.Date como 31/12/1969 21h, ou seja três horas antes que o normal. Meu SO é Windows e o fuso horário é GMT -3h. Muito estranho isso, espero descobrir o que está acontecendo.
Bem vou continuar nessa labuta e continuo aceitando sugestões.