Cómo usar las funciones de fecha-hora

En esta sección:

Las funciones descritas en esta sección operan con campos en el formato fecha-hora (también llamado formato H).


Principio de página

x
Parámetros de fecha-hora

En esta sección:

El parámetro DATEFORMAT especifica el orden de los componentes de fecha de algunos tipos de valores de fecha-hora. El parámetro WEEKFIRST especifica el primer día de la semana. El parámetro DTSTRICT determina hasta qué punto se comprueba la validez de los valores de fecha-hora.



x
Cómo especificar el orden de los componentes de fecha

El parámetro DATEFORMAT especifica el orden de los componentes de fecha (mes/día/año), cuando los valores de fecha-hora se introducen en la cadena formateada y en formatos de cadenas traducidas, descritos en Cómo usar los formatos de fecha-hora. Hace que el formato de entrada de un valor se mantenga independiente con respecto al formato de la variable a que se está asignando.



x
Sintaxis: Cómo Especificar el orden de los componentes de fecha en un campo de fecha-hora
SET DATEFORMAT = option

donde:

option

Puede ser uno de los siguientes: MDY, DMY, YMD o MYD. MDY es el valor predeterminado del formato U.S. English.



Ejemplo: Cómo usar el parámetro DATEFORMAT

La siguiente solicitud emplea un literal de fecha natural, con componentes ambiguos de día y mes numéricos (APR 04 05) como entrada de la función HINPUT:

SET DATEFORMAT = MYD                                    
DEFINE FILE EMPLOYEE                                    
DTFLDYYMD/HYYMDI =  HINPUT(9,'APR 04 05', 8, DTFLDYYMD);
END                                                     
                                                        
TABLE FILE EMPLOYEE                                     
SUM   CURR_SAL NOPRINT DTFLDYYMD                        
END                                                     

Con DATEFORMAT establecido en MYD, el valor se interpreta como Abril 5, 1904:

DTFLDYYMD       
---------       
1904-04-05 00:00


x
Cómo especificar el primer día de la semana para su uso en funciones de fecha-hora

El parámetro WEEKFIRST especifica un día de la semana como principio de la semana. Esto se usa en los cálculos de semanas realizados por las funciones HDIFF, HNAME, HPART y HSETPT. El parámetro WEEKFIRST no cambia el día del mes correspondiente a cada día de la semana, sino que especifica el día considerado como el inicio de la semana.

Las subrutinas HPART, HYYWD y HNAME pueden extraer un número de semana a partir de un valor de fecha-hora. Para determinar el número de la semana, son capaces de emplear la numeración estándar de semanas ISO 8601, que define la primera semana del año como la primera semana de enero con cuatro o más días. Cualquier día previo de Enero pertenecerá a la semana 52 o 53 del año anterior. El estándar ISO también establece el lunes como primer día de la semana.

Estas funciones también pueden definir la primera semana del año como la primera semana con siete días de enero. Ésta es la definición utilizada en ediciones anteriores.

Puede especificar el tipo de numeración de semanas estableciendo el parámetro WEEKFIRST.

Puesto que el número de semana devuelto por las funciones HNAME y HPART puede estar en el año actual, anterior o posterior, puede que no sea muy útil. La función HYYWD devuelve el año y la semana de un valor fecha-hora determinado.



x
Sintaxis: Cómo Establecer un día como inicio de la semana
SET WEEKFIRST = {value|7}

donde:

value

Puede ser:

Un valor del 1 al 7, indicando de domingo a sábado con la numeración de semana no estándar.

o

De ISO1 a ISO7, indicando de domingo a sábado con la numeración de semana estándar ISO.

Nota: ISO es un sinónimo de ISO2.

El estándar ISO establece el lunes como primer día de la semana, así que para cumplir con ISO plenamente, el parámetro WEEKFIRST debe estar en ISO o ISO2.



Ejemplo: Cómo establecer el domingo como inicio de la semana

El siguiente ejemplo explica cómo designar el domingo como inicio de la semana:

SET WEEKFIRST = 1


x
Sintaxis: Cómo Ver la configuración actual de WEEKFIRST
? SET WEEKFIRST

Devuelve el valor de número entero del primer día de la semana. Por ejemplo, el número entero 1 representa el domingo.



x
Cómo controlar el procesamiento de valores de fecha-hora

El procesamiento estricto comprueba los valores de fecha-hora cuando han sido introducidos por un usuario final, leídos desde un archivo de transacciones, mostrados o devueltos por una subrutina, para garantizar que representan una fecha y hora válidas. Por ejemplo, un mes numérico debe ser de entre 1 y 12. El día debe estar dentro del número de días del mes especificado.



x
Sintaxis: Cómo Activar el procesamiento estricto de valores de fecha-hora

SET DTSTRICT = {ON|OFF}

donde:

ON

Invoca el procesamiento estricto. ON es el valor predeterminado.

El procesamiento estricto comprueba los valores de fecha-hora cuando han sido introducidos por un usuario final, leídos desde un archivo de transacciones, mostrados o devueltos por una subrutina, para garantizar que representan una fecha y hora válidas. Por ejemplo, un mes numérico debe ser de entre 1 y 12. El día debe estar dentro del número de días del mes especificado.

Si DTSTRICT se encuentra en ON y el resultado fuese un valor de fecha-hora no válido, la función devuelve el valor cero (0).

OFF

No invoca el procesamiento estricto. Los componentes de fecha-hora pueden tener cualquier valor, dentro de los límites del número de dígitos decimales permitido en el campo. Por ejemplo, si el campo es un mes de dos dígitos, el valor puede ser 12 o 99, pero no 115.


Principio de página

x
Cómo proporcionar argumentos para funciones de fecha-hora

Referencia:

Las funciones de fecha-hora pueden operar con un componente de un valor de fecha-hora. Este tema lista los nombres y abreviaciones válidos de los nombres de componentes, para su uso con estas funciones.



x
Referencia: Argumentos para uso con funciones de fechas y horas

Los siguientes nombres de componentes, abreviaciones válidas y valores son compatibles como argumentos para las funciones de fecha-hora que los requieran:

Nombre de componente

Abreviación

Valores válidos

year
yy

0001-9999

quarter
qq

1-4

month
mm

1-12 o el nombre de un mes, dependiendo de la función.

day-of-year
dy

1-366

day or day-of-month 
dd

1-31 (Ambos nombres de componente son equivalentes.)

week
wk

1-53

weekday
dw

1-7 (Domingo-Sábado)

hour
hh

0-23

minute
mi

0-59

second
ss

0-59

millisecond
ms

0-999

microsecond
mc

0-999999

nanosecond
ns

0-999999999

Nota:

  • En un argumento que especifica una longitud de ocho, diez o 12 caracteres, use el ocho para incluir los milisegundos, el diez, para los microsegundos, y el 12, para los nanosegundos, en el valor devuelto.
  • El último argumento siempre tiene un formato USAGE, que indica el tipo de datos devuelto por la función. Puede ser de tipo A (alfanumérico), I (número entero), D (punto flotante de doble precisión), H (fecha-hora) o de fecha (por ejemplo, YYMD).


x
Cómo usar los formatos de fecha-hora

En esta sección:

Existen tres tipos de formatos de fecha válidos para los valores de de fecha-hora: formato de cadena numérica, formato de cadena formateada y formato de cadena traducida. En cada formato, los años de dos dígitos se interpretan utilizando los parámetros DEFCENT y YRTHRESH.

Los componentes de hora están separados por dos puntos y pueden venir seguidos de A.M., P.M., a.m. o p.m.

El parámetro DATEFORMAT especifica el orden de los componentes de las fechas (mes/día/año), cuando los valores de fecha-hora se introducen en la cadena formateada y formatos de cadenas traducidas. Hace que el formato de entrada de un valor se mantenga independiente con respecto al formato de la variable a que se está asignando.



x
Formato de cadena numérica

El formato de cadena numérica está compuesto exactamente por cuatro, seis u ocho dígitos. Las cadenas de cuatro dígitos se consideran un año (debe especificar el siglo) y el mes y día corresponden a enero 1. Las cadenas de seis y ocho dígitos constan de dos o cuatro dígitos para el año, seguidos de dos para el mes y dos para el día. Dado que el orden de los componentes es fijo en este formato, se ignora la propiedad DATEFORMAT.

Si se encuentra con un formato de cadena numérica superior a ocho dígitos, se trata como si fuese una cadena combinada de fecha-hora, en formato Hnn.



Ejemplo: Cómo usar el formato de cadena numérica

Los ejemplos que siguen son constantes de cadenas numéricas de fechas:

Cadena

Fecha

99

Enero 1, 1999

1999

Enero 1, 1999

19990201

1 de febrero de 1999



x
Formato de cadena formateada

El formato de cadena formateada contiene un día de uno o dos dígitos, un mes de uno o dos dígitos y un año de dos o cuatro dígitos, separados por un espacio, barra diagonal, guión o punto. Estos tres componentes deben estar presentes y respetar la propiedad DATEFORMAT. Si cualquiera de los tres campos consta de cuatro dígitos, se interpreta como un año y los otros dos campos deben seguir el orden asignado por la configuración DATEFORMAT.



Ejemplo: Cómo usar el formato de cadena formateada

A continuación, le mostramos ejemplos de constantes de fechas de cadena formateada que especifican mayo 20, 1999:

1999/05/20
5 20 1999
99.05.20
1999-05-20


x
Formato de cadena traducida

El formato de cadena traducida contiene el nombre del mes, completo o abreviado. Debe contener también el año en forma de cuatro o dos dígitos. Si falta el día, se asume de forma predeterminada el día 1 del mes; si está el día, puede contener uno o dos dígitos. Si la cadena contiene tanto un año de dos dígitos como un día de dos dígitos, estos deben seguir el orden asignado por la configuración DATEFORMAT.



Ejemplo: Cómo usar el formato de cadena traducida

La siguiente fecha está en el formato de cadena traducida:

January 6 2000


x
Formato de hora

Los componentes de hora están separados por dos puntos y pueden venir seguidos de A.M., P.M., a.m. o p.m.

Puede expresar los segundos con un punto decimal o seguidos de dos puntos. Si los segundos vienen seguidos de dos puntos, el próximo valor representa los milisegundos. No existe otra forma de expresar los microsegundos y nanosegundos con esta notación.

El punto decimal en el segundo valor indica la fracción decimal de un segundo. Puede representar los microsegundos con seis dígitos decimales. Los nanosegundos pueden representarse utilizando nueve dígitos decimales.



Ejemplo: Cómo usar los formatos de hora

Los siguientes ejemplos muestran formatos de hora aceptables:

14:30:20:99       (99 milliseconds)
14:30
14:30:20.99       (99/100 seconds)
14:30:20.999999   (999999 microseconds)
02:30:20:500pm


Ejemplo: Cómo usar los valores de entrada universales de fecha-hora

Con las configuraciones DTSTANDARD de STANDARD y STANDARDU, los siguientes valores de fecha y hora se pueden leer como entradas:

Valor de entrada

Descripción

14:30[:20,99]

Comas, no puntos, separan los componentes temporales

14:30[:20.99]Z

Hora universal

15:30[:20,99]+01
15:30[:20,99]+0100
15:30[:20,99]+01:00 

Cada una de estas es igual que la de arriba en la hora Centroeuropea

09:30[:20.99]-05

Igual que la de arriba en la hora del Este (huso horario del Este de Estados Unidos)

Note que estos valores se almacenan interiormente de igual manera que la configuración STANDARDU. Con la configuración STANDARDU, se ignora todo lo que sigue a la Z, +, ó -.



x
Cómo asignar valores de fecha-hora

Cómo:

Un valor de fecha-hora es una constante en formato de caracteres, seguida por uno de estos elementos:

Las constantes de fecha-hora pueden tener espacios en blanco al principio, al final o justo antes de un indicador de am/pm.



x
Sintaxis: Cómo Asignar valores de fecha-hora

En un archivo de caracteres

 date_string [time_string]

o

 time_string [date_string]

En una expresión COMPUTE, DEFINE o WHERE

DT(date_string [time_string])

o

DT(time_string [date_string])

En una expresión IF

'date_string [time_string]'

o

'time_string [date_string]'

donde:

time_string

Es una cadena de hora en un formato aceptable. Las cadenas de hora pueden tener un espacio en blanco justo antes de un indicador am/pm.

date_string

Es una cadena de fecha en formato numérico, formateado o traducido.

En los criterios IF, si el valor no contiene espacios en blanco ni caracteres especiales, no es necesario el uso de comillas simples.

Nota: Las cadenas de fecha y hora deben estar separadas por un espacio en blanco, como mínimo. También se permiten espacios en blanco al principio y al final de la cadena de fecha y hora.



Ejemplo: Cómo asignar literales de fecha-hora

El prefijo DT puede usarse en una expresión COMPUTE, DEFINE o WHERE, para asignar un literal de fecha-hora a un campo fecha-hora. Por ejemplo:

DT2/HYYMDS = DT(20051226 05:45);                                
DT3/HYYMDS = DT(2005 DEC 26 05:45);                              
DT4/HYYMDS = DT(December 26 2005 05:45);   


Ejemplo: Cómo asignar un valor de fecha-hora en un comando COMPUTE

El siguiente ejemplo usa la función DT en un comando COMPUTE, para crear un campo nuevo que contenga un valor de fecha-hora asignado.

TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME AND COMPUTE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
WHERE CURR_JOBCODE LIKE 'B%'
END

La salida es:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM


Ejemplo: Cómo asignar un valor de fecha-hora en criterios WHERE

El siguiente ejemplo usa la función DT para crear un campo nuevo que contenga un valor de fecha-hora asignado. A continuación, el valor se utiliza como un criterio WHERE.

DEFINE FILE EMPLOYEE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
END
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME
WHERE RAISETIME EQ DT(20000101 09:00AM)
END

La salida es:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
STEVENS       ALFRED           $12,100.00  2000/01/01  9:00AM
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
SMITH         RICHARD          $10,450.00  2000/01/01  9:00AM
BANNING       JOHN             $32,670.00  2000/01/01  9:00AM
IRVING        JOAN             $29,548.20  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM
GREENSPAN     MARY              $9,900.00  2000/01/01  9:00AM
CROSS         BARBARA          $29,768.20  2000/01/01  9:00AM


Ejemplo: Cómo asignar un valor de fecha-hora en criterios IF

El siguiente ejemplo usa la función DT para crear un campo nuevo que contenga un valor de fecha-hora asignado. A continuación, el valor se utiliza como un criterio IF.

DEFINE FILE EMPLOYEE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
END
 
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME
IF RAISETIME EQ '20000101 09:00AM'
END

La salida es:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
STEVENS       ALFRED           $12,100.00  2000/01/01  9:00AM
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
SMITH         RICHARD          $10,450.00  2000/01/01  9:00AM
BANNING       JOHN             $32,670.00  2000/01/01  9:00AM
IRVING        JOAN             $29,548.20  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM
GREENSPAN     MARY              $9,900.00  2000/01/01  9:00AM
CROSS         BARBARA          $29,768.20  2000/01/01  9:00AM

Information Builders