Fecha Juliana

En las búsquedas que se hicieron en mi blog, una persona preguntó acerca de la fecha juliana, así como un buen cuate me preguntó. Así, desarrollo ese tema en este post.

Definición

La fecha juliana, es la cantidad de días y sus fracciones desde un periodo inicial. Para ciertas aplicaciones y/o lenguajes, he visto que manejan desde el primero de Enero de 1900, otras desde el primero de Enero del año 1. En el caso de Oracle, es desde el primero de Enero del -4712.

Uso

Generalmente, se usa este tipo de datos para obtener un identificador único e irrepetible para el uso en llaves primarias al momento de insertar registros en una tabla. Sin embargo, no solamente el día juliano se puede usar para esto, se puede crear una versión propia de acuerdo a nuestras necesidades. Por ejemplo, una vez junté los valores de la fecha y la hora para obtener un identificador de este tipo:

SQL> select to_char (sysdate, 'yyyymmddhh24miss') from dual;

TO_CHAR(SYSDAT
--------------
20090205094910

Y el valor obtenido, puede funcionar perfectamente como identificador único, con excepción por ejemplo, de situaciones en las cuales, hay un sistema transaccional donde se tienen a varios cientos de personas registrando eventos en alguna tabla como llamadas a clientes, puede complicarse, porque será muy probable que haya varias personas guardando un registro en el mismo segundo, esto complicaría un poco la situación.

Bajo esta premisa, se pueden aplicar perfectamente las secuencias de Oracle.

Demostración

Ahora, veamos en Oracle el cómo traer la fecha juliana. Para lograr esto, se usa la función to_char con la opción j en el formato.

SQL> select sysdate from dual;

SYSDATE
--------
05/02/09

SQL> select to_char (sysdate, 'j') from dual;

TO_CHAR
-------
2454868

-- Para dividir entre 365, hay que quitar el día extra de cada
-- año bisiesto. En el calendario Juliano, un año bisiesto es
-- divisible solo entre 4; hay 1681 desde -4712 hasta 2008.
SQL> select 2454868 - 1681 from dual;

2454868-1681
------------
     2453187

SQL> select 2453187 / 365 años from dual;

 AÑOS
-----------
 6721.06027

SQL> select 6721.06027 - 2008 from dual;

6721.06027-2008
---------------
     4713.06027

-- En el caso del calendario Gregoriano (el que nos rige actual-
-- mente), un día bisiesto es aquel que se puede dividir entre 4
-- sin contar los divisibles entre 100, si contando los que se
-- dividen por 400. Son menos días, 1630.

SQL> select 2454868 - 1630 from dual;

2454868-1630
------------
     2453238

SQL> select 2453238 / 365 años from dual;

 AÑOS
-----------
     6721.2

SQL> select 6721.2 - 2008 from dual;

6721.2-2008
-----------
     4713.2

Ambos resultados en negritas, deberían de dar 4712 por el valor que marca Oracle como parámetro. Para tratar de discernir qué fue lo que pasó, entré en larga discusión con un par de compañeros en mi trabajo, por la inexistencia del año 0. Pero bajo lo que marca Oracle como valor, debería cuadrar la operación que hice, ya sea con años bisiestos Julianos o Gregorianos.

Sin embargo, de todas formas, lo que nos interesa, es manejar un identificador único de manera fácil y rápida, para eso, funciona a la perfección el día juliano.

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

About these ads

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 476 seguidores

%d personas les gusta esto: