Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/11/2007, 14:23
Avatar de chilenozzz
chilenozzz
 
Fecha de Ingreso: junio-2004
Ubicación: Chile
Mensajes: 44
Antigüedad: 19 años, 10 meses
Puntos: 1
Re: Convertir una fecha!

Muchas gracias por la ayuda!

Con la primera respuesta, la encuentro un poco complicada, porque desconozco cómo tendré que considerar los decimales y cuándo.

Con la segunda respuesta, la del date(), me retorna la siguiente fecha:

01/01/1970 07:55:26

Y encontré la solución, pero no he podido migrarla a la sintaxis de la base de datos Sybase:

Cita:
Si trabajar con información de tipo Fecha, dentro de cursores importados desde MS-Excel es algo raro, el trabajar con datos de tipo DateTime es igual o mas raro...En un artículo anterior ( Trabajar con Información Importada desde MS-Excel, conteniendo datos tipo Fecha [3]) hicimos una revisión de cómo y por qué pasan esas cuestiones de importar fechas, con los tipo de datos Fecha-Hora (DateTime) es practicamente el mismo caso.

La única diferencia radica en que ahora, en vez de exponernos un número entero, nos arroja un número decimal (con 10 dígitos de mantisa). Que significan esos números?, igualmente, son los días transcurridos desde el primero de enero de 1900, los decimales son la porción del día que ha transcurrido en la fecha mencionada. Por lo tanto, si se nos presenta un número como el siguiente: 38007.3568486921 donde su valor debería ser... 24/01/2004 08:33:52 AM, se debería leer: "Han pasado 38007 días y .3568486921 partes del día de hoy, desde el 1 de Enero de 1900".

Así pues, el cálculo es un poquitin más pesado, pero no muy dificil:


lcFile = GETFILE("XLS")
IF NOT EMPTY(lcFile)
IMPORT FROM (lcFile) TYPE XL5
lcAlias=ALIAS()
SELECT *,DATETIME(1900,01,01)+((INT(TUCampoFecha)-2)*86400)+;
(86400*(TuCampoFecha-INT(TuCampoFecha))) as NuevaFecha ;
FROM (lcAlias)
ENDIF


La artimética de los tipos de datos DateTime es un poco distinta a las de tipo Fecha, en Fecha-Hora, sumar algún número siempre será en base de segundos, en los tipo DATE, la base es en días. Por lo tanto he separado un poco los cálculos que a realizar, primero:


(INT(TuCampoFecha)-2)*86400)


Esto representa la parte entera (menos 2) de la "fecha" por 86400, esto es para dejar un número correspondiente a todos los segundos que contendría la fecha importada.

En segundo lugar vendrá la parte de la hora:


(86400*(TuCampoFecha-INT(TuCampoFecha)))


Aquí multiplicamos la parte fraccionaria de nuestro fecha, por 86400, esto para sacar los segundos correspondientes al hora de nuestro dato, así pues, si tomaramos los datos arriba mencionados:


Fecha=38007*86400 = 3283804800
Hora = (38007.3568486921 - 38007) * 86400 = 30831.72699744
FechaHora = 3283835631.72699744
FechaOriginal = DATETIME(1900,1,1)+ 3283835631.72699744 = 23/01/2004 08:33:52 AM


Con esto ya se puede revisar un nuevo dato, ahora sí, de tipo DateTime, con los valores correctamente representandos.

Si alguien me puede ayudar le estaré muy agradecido!!!