Convirtiendo la fecha juliana de JDE con Excel.
Todos aquellos que alguna vez han trabajado con el ERP JD Edwards de Oracle, se deben haber encontrado con la misteriosa fecha juliana que el sistema utiliza para registrar las fechas en su base de datos.
El termino fecha juliana se utiliza, dentro del mundo de JD Edwards, para referirse a un formato específico de fecha que combina, un dígito especial que hace referencia a la centuria, los dos últimos dígitos del año en curso y la cantidad de días que transcurrieron desde el principio del año.
En una forma descriptiva podemos describir al formato de la fecha juliana de JD Edwards de la siguiente forma:
CYYDDD
donde C + 19 describe la centuria, por ejemplo 1 + 19 = 20; YY corresponde al año dentro de esa centuria, por ejemplo 14; y DDD corresponde a la cantidad de días en el año, por ejemplo 100.
Tomando esta definición en cuenta, ya estaríamos en condiciones de poder realizar la conversión de esta fecha juliana a nuestro equivalente formato gregoriano, que es el que todos entendemos. Veamos algunos ejemplos.
Fecha Juliana | Fecha Gregoriana |
082044 | 13/02/1982 |
114001 | 01/01/2014 |
113365 | 31/12/2013 |
En el primer ejemplo, tenemos la fecha juliana 082044; para convertirlo a su equivalente gregoriano utilizamos nuestra formula CYYDDD.
El primer termino C es cero, por lo que C + 19 va a ser igual a 19, aquí ya sabemos la centuria para nuestro año.
El segundo termino nos dice el año de esa centuria, en este caso YY es 82, por lo que ya sabemos que el año completo de nuestra fecha va a ser 1982.
Por último, el tercer termino DDD es 044 y nos dice que trascurrieron 44 días desde el comienzo del año, como el mes de enero tiene 31 días, sabemos que esta fecha debería caer en el mes de febrero y más precisamente el día 13 de febrero (44 – 31 = 13).
Así logramos realizar la conversión de la fecha juliana 082044 a su equivalente fecha gregoriana 13 de febrero de 1982.
Ahora bien, ya logramos descifrar ese misterioso número y entender como podemos hacer para convertirlo a un formato que entendamos más facilmente; pero realizar este proceso manualmente nos puede llevar bastante tiempo, por ejemplo, cual sería el equivalente gregoriano de 112232? Deberíamos encontrar una forma de automatizar este mecanismo.
Una primera solución a este problema, la pueden encontrar también aquí en mi blog, y sería utilizar mi conversor online de fechas para JD Edwards. El cual es muy facil de usar y funciona realmente muy bien.
El único problema que existe con usar mi conversor online es que solo podemos realizar una conversión a la vez, por lo que si necesitamos convertir cientos de fechas distintas, nos llevaría algún tiempo.
Es por esta razón que en este artículo voy a explicar una segunda solución, la cual consiste en aplicar una formula de Excel para realizar la conversión.
Si quisieramos convertir una fecha juliana al formato gregoriano utilizando Excel, simplemente deberíamos aplicar la siguiente fórmula como se describe en el ejemplo.
1 |
=DATE(1900+LEFT(JULIANA;3);1;1) + MOD(JULIANA;1000)-1 |
El termino “JULIANA” hacer referencia a la celda en dónde se encuentra la fecha juliana que queremos convertir.
Genial!, ahora podemos convertir una gran cantidad de fechas en forma masiva, pero existe un nuevo problema con este procedimiento, la formula que debo utilizar no es sencilla, y menos aún fácil de recordar…debería guardarla en algún lado y luego buscarla cuando la necesite utilizar…y esto no sería muy práctico…especialmente si no somos ordenados y no sabemos donde guardamos las cosas! 🙂
Para solucionar este último problemas, podemos utilizar la flexibilidad que nos proporcionan las Macros en Excel y definir nuestra propia formula para realizar la conversión. Aquellos que están interesados en aprender a utilizar las Macros, pueden visitar mi artículo Excel Tips – Introduccion a las Macros (VBA).
Aquí para facilitarles el trabajo y ganar espacio, simplemente voy a detallar como instalar y utilizar el pequeño complemento de Excel que realice para trabajar con estas fechas y que se pueden descargar desde aquí.
Una vez que hayan instalado este complemento, el mismo les va a agregar a su Excel, dos nuevas fórmulas; GREGO() que va a convertir la fecha juliana al formato gregoriano y JUL() que va a realizar el proceso inverso, es decir, transformar una fecha en formato gregoriano a su equivalente fecha juliana de JD Edwards.
Instalando el complemento juliana.xla
Para agregar estas dos formulas a su su Excel, descargen mi complemento y luego guárdenlo en la siguiente dirección de su equipo:
- Para Windows Vista y Windows 7: la dirección dónde deben guardar el complemento es:
- C:\Users\su_usuario\AppData\Roaming\Microsoft\Excel\XLSTART – Tengan en cuenta que la carpeta AppData en principio esta escondida, por lo que deben cambiar las opciones de carpetas para que Windows les muestre las carpetas ocultas.
- Para Windows XP: la dirección es:
- C:\Documents and Settings\su_usuario\Application Data\Microsoft\Excel\XLSTART – Aquí lo mismo, la carpeta Application Data suele estar oculta.
Una vez que hayan realizado los pasos arriba descriptos, van a poder encontrar las formulas en la sección de “User Defined”.
La formula GREGO tiene 3 argumentos; el primero es una fecha juliana, este argumento es obligatorio; el segundo argumento acepta los valores TRUE (1) o FALSE (0), este argumento le dice a la formula si queremos que nuestra fecha tenga un formato de texto, es un argumento opcional; el último argumento también es opcional y le dice a la formula el formato que queremos utilizar si nuestra función tiene formato texto (es decir, si tiene TRUE en el segundo argumento), los valores para este argumento son 1, que le dará a la fecha un formato de “dd/mm/yyyy” , o 2 que le dará a la fecha un formato de “mm/dd/yyyy”.
Ejemplos:
Usando GREGO con el primer argumento.
Al utilizar la función con solo el primer argumento nos devuelve el resultado en formato DateSerial, que es el formato que Excel utiliza internamente para manejar las fechas. No se asusten, para ver la fecha como la entendemos normalmente, simplemente deben darle a la Celda el formato de Fechas.
GREGO con solo el primer argumento luego de darle formato de fecha a la celda.
Usando GREGO con el segundo argumento.
Si utilizamos la formula con el segundo argumento en “TRUE” o 1; nos devuelve directamente la fecha con formato dd/mm/yyyy.
Usando GREGO con el tercer argumento.
Para obtener como resultado la fecha con formato mm/dd/yyyy, utilizamos el segundo argumento en “TRUE” y el tercer argumento con un valor de “2”.
Yo recomiendo utilizar GREGO solo con el primer argumento y dar el formato de fecha a las celdas, ya que así el valor va a ser independiente de la configuración regional que cada cual tenga en su equipo.
Usando la formula JUL.
Su utilización es mucho más simple, simplemente le pasamos como argumento una fecha gregoriana y automáticamente nos devuelve su equivalente en formato juliano.
Hasta aquí este tutorial, espero que les haya sido de utilidad.
Nos vemos en la próxima!
favor ayuda con la diferencia entre dos campos de fechas julianas y que el resultado sea en días gregoriano…
Hola Diego, simplemente realizas las diferencias entre las fechas como si fueran números y el resultado te va a dar la exactamente la cantidad de días, esa es justamente una de las razones de la fecha juliana, que facilita el calculo de diferencias en días. Si no también podes utilizar mi función GREGO en excel para pasar las fechas a gregoriano y luego hacer la resta entre las fechas, excel te va a devolver la diferencia en dias.
Saludos,
Hola, disculpa pero tengo este tipo de numero de serie… “140256” quiere decir que es del año 2014 y el 0256 es el mes y dia en qe fue ensamblado el product, pero en tu formato y la formula que usaste, no me resulta util, y aque me sale otro tipo de año que no tiene nada que ver.
Hola Julian, el número que tu tienes, 140256 no se corresponde con el formato de fecha juliana de JDE que mi formula transforma a gregoriana, para que sea del año 2014 debería ser 114256 de acuerdo al formato CYYDDD que esta explicado en el artículo.
Para transformar tu fecha podrías modificar la formula del siguiente modo:
=FECHA(2000+IZQUIERDA(JULIANA,2),1,1) + RESIDUO(JULIANA,1000)-1 o si tienes excel en ingles =DATE(2000+LEFT(JULIANA,2),1,1) + MOD(JULIANA,1000)-1
Espero que te sea de utilidad. Saludos.
Hola. Que cambios deberia hacer para que los años de 1900 den bien? con esa formula no funcionan. Espero tu respuesta. Gracias!
Hola Mónica,
para las fechas 1900 podrías usar la misma formula, pero agregar un 0 adelante para que tenga un largo de 6 caracteres, en lugar de convertir la fecha juliana 87235, sería 087235.
Sino también podes modificar la formula original y agregar una validación del largo. Algo así…
=SI(LARGO(A14)=6,FECHA(1900+IZQUIERDA(A14,3),1,1) + RESIDUO(A14,1000)-1,FECHA(1900+IZQUIERDA(A14,2),1,1) + RESIDUO(A14,1000)-1)
o en ingles…
=IF(LEN(JULIANA)=6, DATE(1900+LEFT(JULIANA;3);1;1) + MOD(JULIANA;1000)-1, DATE(1900+LEFT(JULIANA;2);1;1) + MOD(JULIANA;1000)-1)
Julian Date
228
225
205
204
176
278
272
274
288
247
I have a julian dates as above values, but I need a formula to get a standard date.
Can you help me.
Thanks
Angel de Leon
Hi Angel, the problem with your julian date format is that there is no way to know the year. If all dates belongs to 2015, then you can add 115 to your date (ej 228 => 115228) and use my formula.
Regards,
Raúl
Hola Raul Ezequiel, para mi es suficiente con la primera opción (sin macros), pero como hago la conversión inversa? de gregoriana a Juliana?
Gracias!!
Saludos!
Hola Ernesto, buen día!
Para pasar de fecha gregoriana a fecha juliana podes usar la siguiente fórmula:
=((AÑO(B2)-1900)*1000)+(FECHA(AÑO(B2),MES(B2),DIA(B2))-FECHA(AÑO(B2),1,1))+1
en donde “B2” es la celda con tu fecha gregoriana.
la formula primero obtiene el año de tu fecha, le resta 1900 y lo multiplica por 1000 para armar los primeros 3 caracteres que representan el año en juliana, luego calcula la diferencia de días entre la fecha y el primer día del año.
Espero te sirva.
Saludos,
Raúl
Gracias Raúl!! muy buena página
Hola Raúl, quisiera pedir tu ayuda. Mi jefe quiere que podamos restar fecha en que llegó un texto y fecha en que se aceptó el texto. Osea quiere una resta de fechas julianas. Me funciona bien, el problema es con las fechas que cambian de año.
ej
116107-116120= 13 (días) … me funciona bien porque ambos son 2016
111349-112010= 661 …. y me debería dar 26 … el error da al cambiar de 2011 a 2012
cómo podré arreglar esto
Hola Gabriela, si estan calculando las diferencias en excel, entonces pueden convertir las fechas julianas a gregorianas con las formula del blog y luego calcular la diferencia entre las fechas. Excel va a calcular las diferencias correctamente. Si lo quieren hacer en fechas julianas, se me ocurre que deberían agregarle un termino de adicional que sería restarle 635 (1000 – 365) a la diferencia entre los días; pero a esto no funcionaría bien para los años bisiestos. Saludos.
Buenas, una consulta que papel juega el -1 al final de esta formula?
Hola Ruben, el -1 es importante porque de lo contrario te va a dar un día posterior…en la primera parte de la formula estas creando una fecha del 1ro de enero del año de la fecha juliana, como ya estas en 1ro de enero cuando sumas los días de la fecha juliana le tenes que restar ese día que tenes de más para que devuelva la fecha corriente y no un día posterior. slds
Excelente trabajo !!!
Muchas gracias.
muy buena tu sabes como lo pedo aplicar a mysql
Gracias!!!
Muy, pero muy buen artículo, te comento que he usado tu complemento por varios años ya, sin embargo ahora migré a Windows 10 y tengo Office 2016, debería funcionar de la misma forma? O tendría que hacer diferente?
Me corrijo, es Office 365
Hola, Debería funcionar igual…yo lo estoy usando con Office 365. Slds.