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 HADD, HDIFF, HNAME, HPART y HYYWD. Además, lo utilizan las funciones DTADD, DTDIFF, DTRUNC, y DTPART. Los valores por defecto son distintos para esas funciones, como se explica en Cómo Establecer un día como inicio de la semana. 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, DTPART, 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 utilizar definiciones diferentes. Por ejemplo, la numeración estándar de semanas ISO 8601, define la primera semana del año como la primera semana de enero de 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.

Puede especificar el tipo de numeración de semanas estableciendo el parámetro WEEKFIRST, como se explica en Cómo Establecer un día como inicio de la semana.

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



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

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.

    La numeración de semanas que utiliza estos valores establece la primera semana de enero con siete días como el número de semana 1. Los días previos de Enero pertenecen a la última semana del año anterior. Todas las semanas tienen siete días.

  • 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.

    La numeración de semanas que utiliza estos valores establece la primera semana de enero con un mínimo de cuatro días como el número de semana 1. Los días previos de Enero pertenecen a la última semana del año anterior. Todas las semanas tienen siete días.

  • De STD1 a STD7, en los que los dígitos de 1 (domingo) a 7 (sábado) indican el día en que empieza la semana.

    Nota: STD sin dígito equivale a STD1.

    A continuación le mostramos la numeración de semanas que utiliza estos valores. El número de semana 1 comienza el 1 de enero y finaliza el día anterior al primer día de la semana. Por ejemplo, para STD1, la primera semana termina el primer sábado del año. La primera y la última semana pueden tener menos de siete días.

  • SIMPLE, que establece el 1 de enero como comienzo de la semana1, el 8 de enero como inicio de la semana 2, etc. El primer día de la semana coincide, por tanto, con el primer día del año. La última semana (semana 53) tiene una duración de uno o dos días.
  • 0 (cero), es el valor de la propiedad WEEKFIRST antes de que el usuario emita una propiedad WEEKFIRST explícita. Las funciones de fecha-hora HPART, HNAME, HYYWD, HADD, y HDIFF utilizan el sábado como inicio de la semana, cuando la configuración de WEEKFIRST es 0. Las funciones simplificadas DTADD, DTDIFF, DTRUNC, y DTPART, además de mostrar las fechas truncadas hasta las semanas, y de reconocer las cadenas de fechas constantes con números de semanas, utilizan el domingo como valor por defecto, cuando la configuración de WEEKFIRST es 0. Si el usuario establece WEEKFIRST en otro valor de forma explícita, el valor será utilizado por el resto de las funciones.


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

Lo siguiente designa el domingo como inicio de la semana, utilizando la numeración de semanas no estándar:

SET WEEKFIRST = 1


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

Esto devuelve el valor que indica el algoritmo de numeración de semanas y el primer día de la semana. Por ejemplo, el número entero 1 representa el domingo con una numeración de semanas no estándar.



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 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, +, o -.



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

WebFOCUS