J'ai une base de données des heures de début et de fin qui ont déjà toutes eu des données assez récentes (des années 1960 à nos jours) que j'ai pu stocker comme entiers longs. Ceci est très similaire à un horodatage unix, seulement avec une précision d'une milliseconde, donc une fonction comme java.util.Date.getTime() serait la valeur de l'heure actuelle.Long de l'horodatage pour les données historiques (pré-1900)
Cela a bien fonctionné jusqu'à présent, mais nous avons récemment obtenu des données à partir des années 1860, et le code suivant ne fonctionne plus lorsque des valeurs qui donnent lieu à l'époque < 1901 (plus ou moins):
to_timestamp('1-JAN-1970 00:00:00', 'dd-mon-yyyy hh24:mi:ss') + numtodsinterval(int_to_convert/(1000),'SECOND');
essayer cette avec une valeur en millisecondes telle que -2177452800000 provoque certains problèmes, tels que renvoyer la date avec un horodatage en l'an 2038. Existe-t-il un moyen de contourner ce problème? Toute la documentation que j'ai consultée sur la documentation et les horodatages devrait être capable de gérer des années jusqu'à -4000 (BC), donc je suspecte un problème avec le numtodsinterval.
Toutes suggestions d'idées seraient grandement appréciées.
Merci pour cette réponse! Cela me donne les informations d'horodatage correctes. Toujours curieux de savoir pourquoi l'autre façon n'a pas fonctionné, mais merci encore. – Mike
Juste pour suivre, je recevais quelques différences de temps et a fini par enlever la deuxième addition de numtodsinterval qui m'a donné la bonne réponse: retourner à_timestamp ('1-JAN-1970 00:00:00', 'dd-mon- aaaa hh24: mi: ss '+ numtodsinterval (val/(1000 * 60 * 60 * 24),' JOUR '); Le problème de précision dans la réponse ci-dessous peut avoir été causé par "to_date" au lieu de "to_timestamp". – Mike