Sea D el día del mes, M el número de mes, e Y la cifra del año.

Aclaración

Si la fecha de la que partimos es anterior a Cristo, para pasarla a cifra numérica hemos de sumarle un año, es decir, si queremos por ejemplo, pasar a cifra numérica el 125 a. C., no se corresponde con el -125, sino con el -124. Esto es debido al salto que hubo en el contar de los años cuando se pasó de antes a despúes de Cristo. No hubo año 0, se pasó  de 1 a. C. al 1 d. C., para adaptarlo a números enteros continuos, debemos pues sumar un año a todos los años anteriores a Cristo.

Continuemos:

  • si M<=2 ⇒M=M+12 ; Y=Y-1
  • si M>2   M e Y no varían

Calculamos las siguientes magnitudes auxiliares

A=INT(Y/100)

B=2-A+INT(A/4)

Donde la función “INT” es la parte entera por defecto de la operación indicada.

Antes de seguir, tenemos otra cuestión. En el 4 de octubre de 1582 se produjo una reforma del calendario. se pasó de la fecha juliana (anterior al 4 de ocubre de 1582) a la fecha gregoriana (porterior al 15 de ocubre de 1582). Este paso fue consecutivo, sin los días intermedios. Del jueves 4 de octubre de 1582 siguió el viernes 15 de ocubre de 1582.

Si estamos convirtiendo una fecha anterior a la reforma gregoriana del calendario, o sea, fecha anterior al 15 de octubre de 1582, tenemos que hacer B=0.

El cálculo final para el día juliano, DJ, es:

DJ=INT(365,25(Y+4716) )+INT(30,6001(M+1) )+D+B-1524,5

El día juliano representa una cuenta continua de días desde el 1 de Enero del año 4713 a. C. a las 12 horas Tiempo Universal (TU). La parte decimal de nuestro día Juliano indica que para nuestros propósitos estamos calculando el día juliano de nuestra fecha de observación a las 0 h. TU.

Ejemplo

Calculemos el día juliano correspondiente al 2 de Octubre de 2013 a las 0h TU. Las variables iniciales son las siguientes

D=2

M=10

Y=2013

Las cantidades auxiliares A y B serán

A=INT(2013/100)=INT(20,13)=20

B=2-20+INT(20/4)=-18+5=-13

Y el día juliano correspondiente al 2 de Octubre de 2013 es el

DJ=INT(365,25∙(2013+4716) )+INT(30,6001∙(10+1) )+2-13-1524,5

DJ=INT(365,25∙6729)+INT(30,6001∙11)+2-13-1524,5

DJ=INT(2457767,25)+INT(336,6011)+2-13-1524,5

DJ=2457767+336+2-13-1524,5=2456567,5

Con permiso del autor del articulo, Lito, y ante las dudas para poder implementar la formula en programación, voy a dar una solución para excel que puede ser traspasada a cualquier otro lenguaje.

En ella sólo hay que introducir la fecha, tal cual exacta, ya la hoja se preocupa de tenerlo en cuenta tanto para años a.c., como para el cambio gregoriano, y da error los días fantasma que son del 5 al 14 de octubre de 1582 (ambos incluidos).

Para el 4/10/1582 da 2299160 y para el 15/10/1582 da 2299161, para el 1 de enero de 4.713 da 0 (año -4.713)

Para 15/10/1582

Para 1 de enero de -4.713


Y el día de hoy el artículo actualizado para programadores es



Anuncios

15 comentarios to “Conversión de fecha a día juliano”

  1. Alam Acosta Says:

    Hola que tal tengo una duda del porque sale esta formula para calcular el día juliano no se si me puedan ayudarme?

  2. Soleado Says:

    Hola a todos:
    Este es un tema que me interesa y estoy tratando de solucionar que calcule cualquier fecha y no solo de unos siglos y entre otras barreras con la que me encuentro es como calcular antes del 4 y 15 de octubre de 1582, lo he hecho en programación pero solo coge los siglos en que por ejemplo coge el XX y XXI, pero no se como poner antes de la fecha del cambio, ya que la variable B cambia completamente, ¿podéis ayudarme?

    Gracias por todo.
    Saludos

    1. Agustín A Says:

      Claro, para explicarlo es complicado sin hacerlo en algún formato de programación, todo está dicho ya en el articulo pero implementarlo es otra cosa. Aquí no tengo espacio suficiente, voy a programarlo para excel por ejemplo y solo tienes que pasarlo a otro lenguaje. Si no entiendes las instrucciones en excel me preguntas. Lo mejor, con permiso de Lito, lo voy a publicar en la página, ya algún otro amigo lo había pedido pero hay que buscar tiempo.

  3. Francisco Risso Patrón Says:

    Hay algo que no entiendo de la fórmula…¿Si introduzco la fecha 1,5 de Enero de -4713 (1,5 porque es a las 12 horas) no debería dar cero? Me da -326

    1. Manuel Jimenez del Barco Says:

      Efectivamente tus cálculos son correctos.
      Gracias Francisco por tu aportación. Gracias a ella he detectado que me faltaba aclarar en el artículo dos sucesos importantes que sucedieron en la antiguedad para la correcta aplicación de la conversión de fecha de calendario a día juliano.
      La primera es cómo expresar correctamente numericamente hablando los años anteriores a cristo y la segunda, el impacto en la fórmula del día juliano de la reforma gregoriana del calendario.
      Ya he comentado dichos hechos en el artículo, así los cálculos para la fecha que indicas, dan lo correcto, es decir 0.

  4. Carlos Arita Amador Says:

    Tengo entendido que la fecha inicial es el 1 de enero de 4713 y no el 4716 A.C. podrían confirmarme ese dato. Y si 4713 fuese lo correcto cuales serían los cambios en las fórmulas.

    1. Manuel Jimenez del Barco Says:

      Efectivamente, el día julino empieza su cuenta el 1 de Enero del 4713 a. C., en el texto del artículo aparece el año 4716 a. C., una errata que se ha colado. Procedo a corregirla. Sin embargo las fórmulas para obtenerlas están bien escritas, lo he vuelto a repasar y no hay que corregirlas.
      Carlos, muchas gracias por detectar esta errata.

      Saludos


      1. Hola…..una ayuda por favor…¿como puedo calcular la hora siderea local?…es para hacer un codigo en vb…Gracias


  5. Me perdir con todo esto.. necesito con urgencia convertir este fomato juliano a gregiriano.. pero no logro que funcione en oracle

  6. Diego Says:

    HOLA SALUDOS,

    NOSE PROGRAMACIÓN MUCHO DE PROGRAMACIÓN Y SERÍA INCREIBLE QUE LO EXPUESTO LO TRANSFORMARAN EN UNA FUNCION SQL ME AYUDARÍA DE MUCHO…

    1. Agustín A Says:

      Perdona Diego, este mensaje se ha quedado pendiente no visible. Si te sirve de ayuda te paso un enlace con un conversor web http://www.ugr.es/~eaznar/conversorFecha.htm. SI lo que quieres es código, en astronomía se usa actualmente el Phyton puedes ver una rutina en http://es.scribd.com/doc/170407577/Dia-Juliano-Python#scribd. Si la quieres en Sql, directamente tienes una función TO_CHAR (“AAAA-MM-DD”, j) con el parametro j te da la fecha en juliana, si quieres al reves existe TO_DATE con el mismo parámetro te pasa día juliano a fecha.

  7. Emanuel Says:

    Gracias por la formula 🙂

  8. Albert Says:

    Donde dice si M<2 ⇒M=M+12 ; Y=Y-1
    Debería decir si M<=2 ⇒M=M+12 ; Y=Y-1
    Saludos

    1. Agustín A Says:

      Gracias Albert, tienes razón corregido.

Responder

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.