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

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

  1. Juan José Lozano Says:

    Os acabo de enviar, una vez revisado, dos nuevos Excel para calcular el día juliano de una fecha, el resultante de añadir o restar un número de días a la fecha inicial y la diferencia entre dos fechas. Espero sus comentarios o problemas que se les puedan presentar. Se han realizado en Office 365.
    Atentamente

    1. Manuel Jimenez del Barco Says:

      Gracias por el aporte

  2. Eliseo Alatorre Chávez Says:

    Hola a todos, por si a alguien le interesa. Son las funciones que se pueden ingresar en una macro en Excel, estan realizadas en VB6 para utilizarse en Excel, no vi como ingresar el archivo Excel para compartirlo.

    Private Function NDiasMES(ByVal Mes As Integer) As Integer
    Dim NDMx
    NDMx = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    NDiasMES = IIf((Mes >= 1) And (Mes = 1) And (Dia = 1) And (Mes 2), (DJAx(Mes – 1) + Bisiesto(Año) + Dia), (DJAx(Mes – 1) + Dia)), (-1)), (-1))
    End Function

    ‘ Día Juliano Astronómico de la FECHA INGRESADA . . .
    Public Function DJAs(ByVal Año As Integer, ByVal Mes As Integer, ByVal Dia As Integer) As Long
    Dim y2 As Double, m2 As Double, d2 As Double, A As Double, B As Double, DJ As Integer
    y2 = IIf(Mes <= 2, IIf(Año < 0, Año, Año – 1), IIf(Año < 0, Año + 1, Año)): m2 = IIf(Mes <= 2, Mes + 12, Mes): d2 = Dia + 0.5
    A = Int(y2 / 100)
    B = IIf(y2 1582, 2 – A + Int(A / 4), IIf(m2 10, 2 – A + Int(A / 4), IIf(d2 = 15, 2 – A + Int(A / 4), 0))))))

    DJ = DJA(Año, Mes, Dia)
    ‘ Verificamos que (05-Octubre-1582 al 15
    If ((Año = 1582) And ((DJ >= 278) And (DJ <= 287))) Then
    DJAs = 0
    Else
    DJAs = Int(365.25 * (y2 + 4716)) + Int(30.6001 * (m2 + 1)) + d2 + B – 1524.5
    End If
    End Function

    1. Agustín A Says:

      Puedes mandarlo a aamagallanesjerez@gmail.com y vemos como incorporarlo nosotros, por supuesto con tu autoría por delante. Muchas Gracias.

  3. Juan José Lozano Says:

    Buenos días desde Canarias.
    Al tener algunas incidencias en los cálculos, hice un nuevo libro Excel, consultando los resultados con el conversor “https://www.ugr.es/~eaznar/conversorFecha.htm”. Además incluí el cálculo de nueva fecha añadiendo una diferencia en días y la diferencia en días entre dos fechas a partir del año 4713 a.C. (Sabes que Excel no admite fechas anteriores a 1900 d.C.). Por cierto, alguien tendrá que decir a Microsoft que a partir de la entrada en vigor del año gregoriano, los múltiplos de 100 no divisibles por 400 no son bisiestos; sin ir más allá, 1900 no es bisiesto.
    Si me das un correo, te puedo mandar la tabla de Excel.
    Un saludo afectuoso,

    1. Agustín A Says:

      Ok, gracias. Puedes contactar en el habitual contacto@aamagallanes.es

      1. caschi Says:

        Gracias. Cuando tenga corregidos algunos errores que estoy detectando, les haré llegar el libro de Excel. Saludos

  4. Juan José Lozano Says:

    No me queda claro los términos 30.6001 ni 1524,5. Podrían desarrollarlos? Gracias

  5. 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?

  6. 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.

  7. 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.

  8. 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


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

  10. 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.

  11. Emanuel Says:

    Gracias por la formula 🙂

  12. 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 a Diego Cancelar respuesta

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.