gregorian convert date jdedwards julian-date

convert - julian date 2018



¿Cuál es la definición precisa del formato Julian Date de JDE? (8)

El "JDE Julian Date Converter" devuelve un valor negativo para:

1809/07/23 : -90635

A diferencia de la clásica fecha juliana :

The Julian date for CE 1809 July 23 00:00:00.0 UT is JD 2381986.50000

Aquí hay un ejemplo de JD EDWARDS (software AS / 400) Julian Date , pero esa no es una documentación "oficial" y no parece ser compatible con las fechas anteriores a 1900 ...

Nota: este " ACC: Cómo convertir días julianos a fechas en el acceso y el regreso " tampoco admite la fecha anterior a 1900 ... ya que habla de un día juliano "informal", comúnmente utilizado por agencias gubernamentales y contratistas .

El formato informal del día juliano utilizado en este artículo es el día ordinal de un año (por ejemplo, el día juliano 032 representa el 1 de febrero o el día 32 del año).
Las variaciones en los formatos informales del día juliano incluyen el uso de un año anterior de dos dígitos (por ejemplo, 96032 para el 2/1/96) y la separación del año con un guión (por ejemplo, 96-032).
Otro formato de día juliano, menos popular, usa un año de un dígito (por ejemplo, 6-032). Estos formatos adicionales no identifican de manera única el siglo o la década. Debes considerar cuidadosamente las consecuencias al usar estos formatos; por ejemplo, el día juliano 00061 se puede interpretar como 3/1/2000 o 3/2/1900.

Estoy escribiendo código para convertir de una fecha gregoriana a una fecha juliana de JDE ( JDEdwards ).

Nota: una fecha juliana de JDE es diferente del uso normal del término fecha juliana .

Por lo que puedo deducir de Google, la definición de fecha JDE Julian es:

1000*(year-1900) + dayofyear

donde año es el año de 4 dígitos (p. ej., 2009) y dayofyear es 1 para el 1 de enero y cuenta todo el año a 365 o 366 para el 31 de diciembre (dependiendo de si se trata de un año bisiesto).

Mi pregunta es esta: ¿son compatibles años anteriores a 1900? Si es así, ¿la fórmula anterior aún se mantiene, o debería ser esta:

1000*(year-1900) - dayofyear

(nota menos en lugar de más)

¿o algo mas?

¿Alguien tiene un enlace a la documentación oficial para este formato de fecha?


Actualización : Lo sentimos, JDE es probablemente otra cosa. Pero para referencia:

El JDE que conozco es diferente. De la página 59 en el libro "Algoritmos astronómicos" (Jean Meeus, ISBN 0-943396-35-2):

"Si el JD corresponde a un instante medido en la escala de Tiempo Dinámico (o Tiempo de Efemérides), generalmente se usa la expresión Día de Julian Efemérides (JDE). (No JED como
a veces está escrito. La ''E'' es una especie de índice adjunto a ''JD'') "

JD y JDE (para el mismo punto en el tiempo) tienen un valor cercano ya que la diferencia UT y ET es del orden de minutos. Por ejemplo, ET-UT fue de 56.86 segundos en 1990 y -2.72 segundos en 1900.

También hay MJD (Día Juliano modificado):

MJD = JD - 2400000.5

El punto cero para MJD es 1858-11-17, 0h UT.

Tenga en cuenta que JD como Julian date es un nombre inapropiado. Es el día de Julian. El JD no tiene nada que ver con el calendario juliano. (Esto está en desacuerdo con el artículo de Wikipedia, esto es del autor del libro mencionado anteriormente, Jean Meeus - astrónomo belga especializado en mecánica celeste).


Tal vez fuera de la pregunta, puede convertir en Excel usando la siguiente fórmula:

Convierta a Julian en una fecha en Excel

En la celda A2, coloque una fecha juliana, como 102324
en la celda B2, coloque esta fórmula: (cópiela)
=DATE(YEAR("01/01/"&TEXT(1900+INT(A2/1000),0)),MONTH("01/01/"&TEXT(1900+INT(A2/1000),0)),DAY("01/01/"&TEXT(1900+INT(A2/1000),0)))+MOD(A2,1000)-1

La fecha del 20/11/02 aparecerá en la celda B2

Convertir la fecha a Julian en Excel

En la celda C2 copia esta fórmula:
=(YEAR(B2)-2000+100)*1000+B2-DATE(YEAR(B2),"01","01")+1

Esto convertirá B2 de nuevo a 102324


Guarde el siguiente código fuente en un miembro fuente llamado JDEDATES. Usa el runsqlstm en la primera línea para crear las funciones. Entonces puedes hacer cosas como

select jde2date(A1UPMJ), f.* from f00095 f

y ver una fecha real.

Fuente:

--RUNSQLSTM SRCFILE(qtxtsrc) SRCMBR(JDEDATES) COMMIT(*NONE) NAMING(*SQL) -- jde 2 date create function QGPL/jde2date ( d decimal(7,0)) returns date language sql deterministic contains sql SET OPTION DATFMT=*ISO BEGIN if d=0 then return null; else return date(digits(decimal(d+1900000,7,0))); end if; end; -- date 2 jde create function QGPL/date2jde ( d date) returns decimal(7,0) language sql deterministic contains sql SET OPTION DATFMT=*ISO BEGIN if d is null then return 0; else return (YEAR(D)-1900)*1000+DAYOFYEAR(D); end if; end ;


Una muestra del código VBA para convertir entre JDE Julian Date y Gregorian:

Public Const Epoch = 1900 Public Const JDateMultiplier = 1000 Public Const FirstJan = "01/01/" Public Function Julian2Date(ByVal vDate As Long) As Date Dim Year As Long Dim Days As Long Dim SeedDate As Date '' Day Number Days = vDate - (Int(vDate / JDateMultiplier) * JDateMultiplier) - 1 '' Calendar Year Year = ((vDate - Days) / JDateMultiplier) + Epoch '' First Day of Calendar Year SeedDate = CDate(FirstJan + CStr(Year)) '' Add Number of Days to First Day in Calendar Year Julian2Date = DateAdd("d", Days, SeedDate) End Function Public Function Date2Julian(ByVal vDate As Date) As Long Dim JYear As String Dim BeginDate As Date Dim JDays As Long '' Calendar Year JYear = Format(Year(vDate), "0000") '' First Day of Calendar Year BeginDate = CDate(FirstJan + JYear) '' Day Number JDays = DateDiff("d", BeginDate, vDate) + 1 '' Add Number of Days to Year Number Date2Julian = ((CLng(JYear) - Epoch) * JDateMultiplier) + JDays End Function

He tratado de hacerlo lo más claro y simple posible, y con este fin he omitido intencionalmente cualquier error de captura. Sin embargo, debería poder agregar el código a un módulo VBA y llamarlos directamente desde su propio código.

También incluyo algunos fragmentos útiles de T-SQL:

Fecha de hoy como JDE Julian Date:

(datepart(yy,getdate())-1900) * 1000 + datepart(dy, getdate())

Convierta JDE Julian Date a Gregorian (DD / MM / YYYY), reemplace XXXXXX con el nombre de columna que contiene el JDE Julian Date:

convert (varchar, dateadd (day,convert (int, right(XXXXXX,3)) - 1, convert (datetime, (''1/1/'' + convert ( varchar, (cast(left(right(XXXXXX+1000000,6),3) as varchar) + 1900))))),103)

Si necesita un formato gregoriano diferente, reemplace el valor 103 (al final) con el valor aplicable que se encuentra aquí: https://msdn.microsoft.com/en-us/library/ms187928.aspx


Tengo una manera fácil para C usando el tiempo ahora y la época 1970, 01, 01 medianoche si alguien está interesado. Pero esto es para Julian Day Numbers, que no es lo mismo que JDE, pero son similares con respecto al uso de las matemáticas para calcular los días y estoy seguro de que esta idea podría adaptarse para JDE. A veces las personas simplemente confunden a los dos como yo. Lo siento. Pero aún así, este es un ejemplo del uso de una referencia de tiempo que siempre se debe hacer y dado que la mayoría de las computadoras lo usan, sería igual de fácil para nosotros no empantanarnos en las fechas y usar días antes o después de esta época.

Como JDE ahora es propiedad de Oracle, ahora también es compatible con Julian_Day. ver: https://docs.oracle.com/javase/8/docs/api/java/time/temporal/JulianFields.html

#include <stdio.h> #include <time.h> #define EPOCH (double) 2440587.5 /* Julian Day number for Jan. 01, 1970 midnight */ int main () { double days = time(0)/86400.0; printf ("%f days since January 1, 1970/n", days); printf ("%f/n", days + EPOCH); return 0; }


Vaya, hay muchas claves complicadas en algunas de estas respuestas solo para convertir ay desde las fechas julianas de JDE. Hay formas simples en Excel y VBA para llegar allí.

DE JULIAN

Excel (suponiendo que la fecha juliana está en A1):

=DATE(1900+LEFT(A1,LEN(A1)-3),1,RIGHT(A1,3))

VBA (desde julian date, j, almacenado como String):

d = DateSerial(1900 + Left$(j, Len(j) - 3), 1, Right$(j, 3))

VBA (desde julian date, j, almacenado como Long):

d = DateSerial(1900 + Left$(j, Len(CStr(j)) - 3), 1, Right$(j, 3))

A JULIAN

Excel (suponiendo que la fecha esté en A1):

=(YEAR(A1)-1900)*1000+A1-DATE(YEAR(A1),1,0)

VBA (a un Largo, j):

j = (Year(d) - 1900) * 1000 + DatePart("y", d)


La fecha juliana de JDE consiste en CYYDDD que es Siglo, Año, Día del año.

Century es cero para el vigésimo ejemplo, por ejemplo, 19XX y uno para el 21, por ejemplo, 20XX.

El año tiene dos dígitos. Entonces 101001 es el 1 de enero de 2001

Como puede ver, esto no respaldará las fechas anteriores a 1900.

Consulte esta página de Oracle para obtener una explicación simple y oficial: Acerca del formato de fecha juliano