Obteniendo la fecha y la hora actuales

12 comentarios

En Firebird tenemos varias formas de obtener las fechas y las horas actuales, ellas son:

  • CURRENT_TIMESTAMP
  • CURRENT_DATE
  • CURRENT_TIME
  • ‘NOW’

Con CURRENT_TIMESTAMP se obtienen la fecha y la hora. Por ejemplo:

FECHAHORA01Captura 1. Si haces clic en la imagen la verás más grande

Con CURRENT_DATE obtenemos la fecha actual, por ejemplo:

FECHAHORA02

Captura 2. Si haces clic en la imagen la verás más grande

Con CURRENT_TIME obtenemos la hora actual, por ejemplo:

FECHAHORA03Captura 3. Si haces clic en la imagen la verás más grande

Fíjate que la precisión es de segundos, de la forma anterior podemos obtener la hora, los minutos, y los segundos, ¿pero y si necesitamos mayor precisión? Para eso a la variable de contexto CURRENT_TIME le podemos enviar entre paréntesis un número entre 0 y 3, significando la cantidad de decimales que queremos obtener. Por ejemplo:

FECHAHORA04

Captura 4. Si haces clic en la imagen la verás más grande

FECHAHORA05

Captura 5. Si haces clic en la imagen la verás más grande

FECHAHORA06

Captura 6. Si haces clic en la imagen la verás más grande

Si observas las capturas 4, 5, y 6 notarás que la cantidad de decimales significativos va aumentando, de acuerdo al parámetro que se le envió a la variable de contexto CURRENT_TIME.

1 = 1 decimal (o sea, una precisión de décimas de segundo)

2= 2 decimales (o sea, una precisión de centésimas de segundo)

3 = 3 decimales (o sea, una precisión de milésimas de segundo)

Con ‘NOW’ podemos obtener la fecha, la hora, o la fecha y hora, actuales. Por ejemplo:

FECHAHORA07

Captura 7. Si haces clic en la imagen la verás más grande

FECHAHORA08

Captura 8. Si haces clic en la imagen la verás más grande

FECHAHORA09

Captura 9. Si haces clic en la imagen la verás más grande

Como puedes ver, la precisión de la hora con ‘NOW’ siempre es de milisegundos.

Usando las fechas y horas dentro de un stored procedure, trigger o execute block

Si necesitamos utilizar los valores de las fechas u horas actuales dentro del código fuente, entonces podemos obtener sus valores de la misma manera a como lo haríamos con las columnas de las tablas, algo como:

FECHAHORA10

Captura 10. Si haces clic en la imagen la verás más grande

Desde luego que también podríamos obtener el valor de ‘NOW’ de la forma anterior.

Diferencias entre CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME y ‘NOW’

Quizás te hayas preguntado ¿para qué existe la palabra ‘NOW’ siendo que las fechas y las horas podemos obtenerlas con las variables de contexto?

Bien, la diferencia es que dentro de un stored procedure, trigger o execute block las variables de contexto siempre devolverán el mismo valor. Por ejemplo, si en la primera línea de un stored procedure la variable de contexto CURRENT_TIME devolvía ’14:24:57′ y ese stored procedure demoró en finalizar 40 segundos, en la última línea de ese stored procedure la variable de contexto CURRENT_TIME seguirá devolviendo ’14:24:57′

No cambió su valor. Dentro de un stored procedure, trigger, o execute block, las variables de contexto siempre tienen exactamente el mismo valor.

Pero ‘NOW’ sí cambia su valor dentro de un stored procedure, trigger o execute block. Y con ‘NOW’ siempre tenemos una precisión de milisegundos.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Guardando y leyendo una columna de tipo TIMESTAMP en VFP

2 comentarios

Si programas usando el lenguaje Visual FoxPro entonces puedes tener dos dudas:

  1. ¿Cómo hago para guardar un dato en una columna de tipo TIMESTAMP?
  2. ¿Cómo hago para leer una columna de tipo TIMESTAMP?

1. Guardando una columna de tipo TIMESTAMP

Las columnas TIMESTAMP del Firebird se guardan como una fecha, un espacio en blanco, y una hora. Algo como:

03/08/2014 11:48:25

Que significa: “tres de agosto de dos mil catorce, once horas, cuarenta y ocho minutos, veinticinco segundos”.

En Visual FoxPro para convertir un string en un timestamp se usa la función CTOT(). Veamos un ejemplo:

MiFecha = DATE()
MiHora ="11:48"
MiColumna = CTOT(DTOC(MiFecha) + " " + MiHora)

La función DTOC() significa “date to character” y convierte una fecha a caracter. La función CTOT() significa “character to timestamp” y convierte un caracter a timestamp.

Hay que usar la función DTOC() para poder concatenar la fecha, el espacio en blanco, y la hora.

Fíjate que no es obligatorio completar los segundos, si no pones los segundos el Firebird asumirá que es “00”

Otro ejemplo:

MiFecha = DATE()
MiHora ="11:48:25"
MiColumna = CTOT(DTOC(MiFecha) + " " + MiHora)

 Aquí sí se establecieron los segundos. Es opcional.

Otro ejemplo:

MiFecha = DATE(2014, 8, 3)
MiHora = TIME()
MiColumna = CTOT(DTOC(MiFecha) + " " + MiHora)

 Aquí se usó la función DATE() para establecer la fecha deseada y la función TIME() para establecer la hora deseada.

2. Leyendo una columna de tipo TIMESTAMP

Muy bien, ya has guardado una columna de tipo TIMESTAMP en tu tabla del Firebird, pero ahora quieres leer el contenido de esa columna. ¿Cómo lo haces?

Aquí tienes dos posibilidades:

  1. Dejar el resultado en una variable de tipo timestamp
  2. Separar la columna timestamp para tener en una variable la fecha y en otra variable la hora

Si la que te interesa es la primera posibilidad nada tienes que hacer, la columna que has leído de tu tabla Firebird ya está en el formato adecuado y puedes usarla sin problemas.

Si lo que te interesa es separar el contenido de la columna de tipo TIMESTAMP para tener en una variable la fecha y en otra variable la hora esto es lo que debes escribir:

MiFecha = TTOD(MiColumna)
MiHora = TTOC(MiColumna, 2)

La función TTOD() significa “timestamp to date” y retorna la parte de la fecha de un TIMESTAMP

La función TTOC() significa “timestamp to character” y cuando su segundo argumento es el número 2 retorna la parte de la hora de un TIMESTAMP.

Conclusión:

Usar columnas y variables de tipo TIMESTAMP entre Visual FoxPro y Firebird es sencillo, ninguna complicación, solamente hay que recordar cuales son las funciones adecuadas para usar, eso es todo.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21