Hola desconocido

Hora internet: @ 726

Formato de fecha genérica o canonica

¿Tuviste alguna vez problemas con las fechas? ¿Problemas por la configuracion del formato de la fecha (ingles o español) de la base de datos?
Si es asi, te invito a leer esta pequeña explicación y te propongo que uses la siguiente forma para tratar las fechas. Espero te sirva. Es simplemente una sugerencia de alguien que tubo que lidiar con esos problemas    (Yo mismo).

Bueno, vamos a plantear un caso puntual. Tal vez sea el mas experimentado, asi que a la mayoria de uds. recordarán el problema.
Cada motor de bases de datos, tiene una forma de almacenar la fecha. Access, SQL Server, MySQL, etc...
Aqui hablaremos de Access. Igualemente no me voy a detener a explicar como se almacena la fecha, pero si voy a hablar sobre la configuracion de la fecha.

Access configura sus fechas según la configuración regional de la máquina donde está instalado. Entonces nosotros trabajamos felizmente en nuestro servidor local, y cuando subimos nuestra base de datos a otro servidor (uno que esta configurado para ingles) las fechas deben adaptarse a el nuevo formato de fecha que hay en el servidor.

Hasta aqui no habría problema mayor, ya que todas las fechas estarian invertidas. Ejemplo: La fecha 4/5/2002 que localmente indica 4 de Mayo de 2002, al subir la base de datos la fecha sería 5/4/2002... pero esta fecha también es 4 de Mayo de 2002

Empecemos con el problema. Supongamos que al Access en el servidor local, le indicamos que agregue esta fecha: 4/20/2002. Esa fecha en español no existe, pero el "fantastico" Access "piensa" que nos hemos equivocado, y acepta esa fecha y la invierte a 20/4/2002. Este maneje que hizo Access aqui con nuestra fecha, no tiene que ver con el idioma. Simplemente como dije antes "piensa" que nos equivocamos y supuestamente nos resulve el problema automaticamente. Y de aqui vienen todos nuestros problemas con las fechas, ya que si al Access local (en español) le pasamos 20/4/2002 es igual que pasarle 4/20/2002.

Esto mismo pasa en el Access que está en ingles, sólo que al revez claro...

Cual es el problema de todo esto. Simple. Si trabajamos con fechas en español, funcionara simpre bien abajo, pero NO SIEMPRE bien arriba... pero a veces si! Depende justamente de la fecha. Entonces se hace como imposible hacer un sistema que trabaje correctamente tanto en español como en ingles.

La posible solucion: Usar el formato canónico de fecha expresado como YYYY/MM/DD lo que quiere decir expresar la fecha como Año/Mes/Dia. Entonces la fecha 6 de Enero de 2002 se escribe como: 2002/01/06

Access, reconoce correctamente ese formato, asumiendo SIEMPRE que lo primero es el año, lo segundo el mes y lo tercero el dia. Y luego, lo transforma a su formato, pero nos quedamos trankilos que es correcta la fecha!

Atencion! Que pase si pasamos esta fecha: 2002/20/8 ? .... tira error!! y eso por mas malo que paresca es lo mejor que nos puede pasar. Eso SI sería un error nuestro, y es por eso que está bien recibir error de parte del Access

Bueno... entonces concordamos que lo mejor es usar la fecha canonica. A continuación les paso una función a la cual se le pasa como argumento una fecha, y devuelve la fecha en formato canónico. Pero tengan cuidado con la fecha que le pasan!!! Porque puede que le pasen mal el formato de fecha, y la función devolverá una respuesta que no es la que buscamos.

Si con la función se hacen lios, no la usen, y pasen siempre las fechas en fomatto YYYY/MM/DD

<%
Function FechaGenerica(fecha)
    If IsDate(fecha) = True Then
       DIM dteDay, dteMonth, dteYear
       dia = Day(fecha)
       mes = Month(fecha)
       ano = Year(fecha)
       FechaGenerica = ano & "/" & Right(Cstr(mes + 100),2) & "/" & Right(Cstr(dia + 100),2)
    Else
       FechaGenerica = Null
    End If
End Function
%>

Una última cosa. En sentencias SQL que actualizan bases Access, las fechas se pasan entre # #.
Por ejemplo: INSERT INTO tabla(fecha) VALUE(#"& var_fecha &"#)


© SoloASP.com.ar - 2001 / 2005. Todos los derechos reservados. soloasp@soloasp.com.ar
Buenos Aires - Argentina. Diseño web y programación por Guido Laghi