Opened 13 years ago
Closed 12 years ago
#1600 closed doubt (remind)
Duda sobre TheBegin y TheEnd
Reported by: | imendez | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | Mantainance |
Component: | Kernel | Version: | 3.1 |
Severity: | minor | Keywords: | |
Cc: | atorre@… |
Description
Hola, si definimos la fecha:
Date a = y1582m12d31;
o cualquiera anterior en el tiempo, TOL nos devuelve el valor TheBegin.
La siguiente función trata de devolver, a partir de una serie cuyo fechado es un subconjunto de diario (entendido como lunes-viernes, martes, etc.), la misma serie entre el primer mes en el que la serie tome valor desde el primer día del mes, y el último mes en el que tome valor hasta el último día.
Serie CompletedMonth(Serie varDia) ////////////////////////////////////////////////////////////////////////////// { Date Final = Last(varDia); Date FinalAux = Succ(Final, Dating(varDia), 1); Date FinalDate = If( Month(Final) == Month(FinalAux), Succ(Succ(FinalAux,Mensual,-1),Dating(varDia),-1), Final); Date Initial = First(varDia); Date InitialAux = Succ(Initial, Dating(varDia), -1); Date InitialDateAux = If(Month(Initial) == Month(InitialAux), Succ(Initial,Mensual,1), Initial); Date InitialDate = If( Belong(InitialDateAux, Dating(varDia)), Date InitialDateAux, Date Succ(InitialDateAux, Dating(varDia), 1)); Set fechas = [[ InitialDate, FinalDate]]; Serie dia = If(Card(fechas) > 0, { Date fec1 = fechas[1]; Date fec2 = fechas[2]; Serie TruncvarDia = SubSer(varDia, fec1, fec2); TruncvarDia }, { WriteLn("El fechado de la serie es incompatible"); CalInd(C,Diario) }) };
Seguro que la función se puede hacer más bonita (y eficiente), pero mi duda es la siguiente: cuando la aplico a la siguiente serie
Serie sr = SubSer(CalInd(C, Diario), y1583m01d02, y1583m01d02); Serie srC = CompletedMonth(sr);
Me devuelve un serie srC cuya fecha final es TheEnd.
Es decir, la línea
Succ(Succ(FinalAux,Mensual,-1),Dating(varDia),-1)
donde FinalAux es y1583m01d03, devuelve TheEnd.
Sé que es rebuscado, pero ¿es normal?
Saludos,
Iván
Change History (2)
comment:1 Changed 13 years ago by
comment:2 Changed 12 years ago by
Resolution: | → remind |
---|---|
Status: | new → closed |
Pues resulta que nuestro calendario actual, el calendario gregoriano , comienza el día 1 de enero de 1583, bueno en realidad fue el 15 de octubre de 1582, pero por redondear a años tomamos el siguiente día de año nuevo.
Al jueves del calendario juliano 4 de octubre de 1582 le sucede el viernes del calendario gregoriano 15 de octubre de 1582. Diez días desaparecen debido a que ya se habían contado de más en el calendario juliano.
Para tratar fechas anteriores habría que empalmar los dos calendarios lo cual supone un trabajo importante de dudosa utilidad, por eso se tomó este día como inicio del tiempo.
El caso es que la expresión
no devuelve
TheEnd
sinoTheBegin
como era de esperar.Es el
SubSer
el que no funciona bien si la fecha final esTheBegin
pues probablemente no se haya contemplado esa posibilidad. Lo estudiaré a ver si lo encuentro aunque este tipo de cosas son complicadas de resolver.