Cómo usar las funciones de fechas estándar

En esta sección:

Durante el uso de las funciones de fechas estándar, es importante que conozca los ajustes y propiedades que afectan a su comportamiento, además de los formatos aceptables y el modo en que éstos se proporcionan.

Puede afectar al comportamiento de las funciones de fechas de las siguientes formas:

Para más información sobre cada función de fechas estándar, consulte:

DATEADD: Cómo añadir o restar una unidad de fecha de una fecha

DATECVT: Cómo convertir el formato de una fecha

DATEDIF: Cómo hallar la diferencia entre dos fechas

DATEMOV: Cómo cambiar la fecha a un punto importante

DATETRAN: Cómo aplicar un formato internacional a las fechas

DPART: Cómo extraer un componente de una fecha

FIYR: Cómo obtener el año financiero

FIQTR: Cómo obtener el año financiero

FIYYQ: Cómo convertir una fecha de calendario en una fecha financiera

TODAY: Cómo devolver la fecha actual


Principio de página

x
Cómo especificar los días de trabajo

En esta sección:

Puede definir los días que son de trabajo y los que no lo son. Los días de trabajo afectan a las funciones DATEADD, DATEDIF y DATEMOV. Identifique los días de trabajo como laborables o festivos.



x
Cómo especificar los días laborables

Tradicionalmente, los días laborables son de lunes a viernes, aunque no todas las empresas siguen esta planificación. Por ejemplo, si su empresa opera los domingos, martes, miércoles, viernes y sábados, puede ajustar las unidades de día laborable para que reflejen su planificación.



x
Sintaxis: Cómo Configurar los días laborables
SET BUSDAYS = smtwtfs							

donde:

smtwtfs

Es la lista de días, de siete caracteres que representa su semana laborable. La lista cuenta con una posición para cada día, de domingo a sábado:

  • Para identificar un día de la semana como laborable, introduzca la primera letra del día en su posición correspondiente.
  • Para identificar un día no laborable, introduzca un carácter de subrayado (_) en la posición de ese día.

Si alguna letra está en una posición incorrecta, o si sustituye una letra por un carácter que no sea un guión bajo, aparece un mensaje de error.



Ejemplo: Cómo configurar los días laborables para que reflejen su semana de trabajo

El siguiente código designa los días de trabajo como domingo, martes, miércoles, viernes y sábado:

SET BUSDAYS = S_TW_FS


x
Sintaxis: Cómo Ver la configuración actual de días laborables
? SET BUSDAYS


x
Cómo especificar los días festivos

Puede especificar una lista de fechas designadas como festivas, en su empresa. Estas fechas quedan excluidas del uso de las funciones que realizan cálculos basados en los días de trabajo. Por ejemplo, si el jueves de una semana determinada está designado como festivo, el siguiente día de trabajo posterior al miércoles será el viernes.

Para definir una lista de días festivos, debe:

  1. Crear un archivo de festivos utilizando un editor de texto estándar.
  2. Seleccionar el archivo de festivos emitiendo el comando SET junto con el parámetro HDAY.


x
Referencia: Reglas para crear un archivo de festivos
  • Las fechas deben estar en formato YYMD.
  • Las fechas deben estar en orden ascendente.
  • Cada fecha debe ocupar su propia línea.
  • Nota: Debe incluir todos los años para los que existen datos para que el archivo sea considerado como válido. Si invoca una función de fechas con un valor situado fuera del rango del archivo de festivos, el resultado de las solicitudes de días laborables será cero.

    Si esta restando dos fechas de 2005 y la última del archivo de días festivos es 20041231, la operación de sustracción no se lleva a cabo. Un modo de evitar esto consiste en utilizar una fecha muy alejada del futuro en cualquier archivo de días festivos que haya creado (por ejemplo, 29991231).

  • Puede incluir una descripción opcional del día festivo, separado de la fecha mediante un espacio.

Por defecto, el archivo de festivos tiene un nombre con forma HDAYxxxx.err y está situado en su ruta o, en z/OS, bajo la implementación de PDS, es un miembro llamado HDAYxxxx de un PDS asignado a DDNAME ERRORS. En su procedimiento o solicitud, debe emitir el comando SET HDAY=xxxx para identificar el nombre del archivo o miembro. Alternativamente, puede definir cualquier nombre para el archivo y almacenarlo en cualquier lugar o, en z/OS, bajo la implementación de PDS, asignar el archivo de festivos como un archivo secuencial con cualquier nombre, o como miembro HDAYxxxx de cualquier PDS. Para más información sobre cómo utilizar nombres de archivos de festivos no predeterminados, consulte Cómo FILEDEF o DYNAM del archivo de festivos.



x
Procedimiento: Cómo Crear un archivo de festivos
  1. En un editor de texto, cree una lista con las fechas designadas como festivas, siguiendo las Reglas para crear un archivo de festivos.
  2. Guarde el archivo.

    Si no está usando una convención de nomenclatura predefinida, consulte Cómo FILEDEF o DYNAM del archivo de festivos. Si está usando la convención de nomenclatura predefinida, siga estas instrucciones:

    En Windows y UNIX: El archivo debe ser HDAYxxxx.ERR

    En z/OS: El archivo debe ser un miembro de ERRORS, llamado HDAYxxxx.

    donde:

    xxxx

    Es una cadena de texto de cuatro caracteres.



x
Sintaxis: Cómo Seleccionar un archivo de festivos
SET HDAY = xxxx							

donde:

xxxx

Es la parte del nombre del archivo de festivos situada después de HDAY. Esta cadena debe tener cuatro caracteres de longitud.



Ejemplo: Cómo crear y seleccionar un archivo de festivos

A continuación, le mostramos el archivo HDAYTEST, que establece los días festivos:

19910325 TEST HOLIDAY
19911225 CHRISTMAS

El siguiente código establece HDAYTEST como archivo de festivos:

SET BUSDAYS = SMTWTFS
SET HDAY = TEST

Esta solicitud emplea HDAYTEST en sus cálculos:

TABLE FILE MOVIES
PRINT TITLE RELDATE
COMPUTE NEXTDATE/YMD = DATEADD(RELDATE, 'BD', 1);
WHERE RELDATE GE '19910101';
END

La salida es:

TITLE                                    RELDATE   NEXTDATE
-----                                    -------   --------
TOTAL RECALL                             91/03/24  91/03/26


x
Sintaxis: Cómo FILEDEF o DYNAM del archivo de festivos

Utilice la siguiente sintaxis en todos los entornos excepto z/OS, bajo la implementación de PDS.

FILEDEF HDAYxxxx DISK {app/|path}/filename.ext							

donde:

HDAYxxxx

Es el nombre lógico (DDNAME) del archivo de festivos, donde xxxx representa cuatro caracteres cualesquiera. El nombre lógico se establece emitiendo el comando SET HDAY=xxxx en su procedimiento o solicitud.

app

Es el nombre de la aplicación en que reside el archivo de festivos.

path

Es la ruta al archivo de festivos.

filename.ext

Es el nombre del archivo de festivos.

En z/OS, bajo la implementación de PDS, utilice lo siguiente para asignar un archivo de festivos secuencial.

DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix SHR REU

En z/OS, bajo la implementación de PDS, utilice lo siguiente para asignar un archivo de festivos que sea miembro de un PDS.

DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix(HDAYxxx) SHR REU

donde:

HDAYxxxx

Es el DDNAME del archivo de festivos. Su FOCEXEC o solicitud deben establecer el parámetro HDAY en xxxx, donde xxxx son cuatro caracteres que ud. elija. Si su archivo de festivos es miembro de un PDS, HDAYxxxx también debe ser el nombre del miembro.

qualif.filename.sufijo

Es el nombre completamente cualificado del archivo secuencial, o el PDS con el miembro HDAYxxxx, que contienen la lista de festivos.



Ejemplo: Cómo definir un archivo de festivos

El siguiente archivo de festivos, llamado holiday.data, situado en el directorio c:\temp de Windows, define Noviembre 3, 2011 y Diciembre 24, 2011 como días festivos:

20111103
20111224

La siguiente solicitud, basada en el origen de datos MOVIES, emplea el comando FILEDEF para definir este archivo como el archivo de festivos. El nombre lógico en el comando FILEDEF es HDAYMMMM; el procedimiento emite el comando SET HDAY=MMMM. A continuación, define la fecha Noviembre 2, 2011 y calcula el próximo día laborable:

FILEDEF HDAYMMMM DISK c:\ibi\holiday.data
SET HDAY = MMMM                                      
SET BUSDAYS = _MTWTF_                                
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1); 
END
TABLE FILE MOVIES                                    
SUM COPIES NEWDATE NEXTDATE                                 
ON TABLE SET PAGE NOPAGE   
END

La salida muestra que el próximo día laborable, posterior a Noviembre 2, es Noviembre 4, ya que Noviembre 3 es festivo:



Ejemplo: Cómo asignar el archivo de festivos a un archivo secuencial en z/OS, bajo una implementación de PDS

El siguiente archivo secuencial, llamado USER1.HOLIDAY.DATA, define Noviembre 3, 2011 y Diciembre 24, 2011 como festivos:

20111103
20111224

La siguiente solicitud, basada en el origen de datos MOVIES, emplea el comando DYNAM para asignar este archivo como el archivo de festivos. El DDNAME en el comando DYNAM es HDAYMMMM; el procedimiento emite el comando SET HDAY=MMMM. A continuación, define la fecha Noviembre 2, 2011 y calcula el próximo día laborable:

DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA SHR REU
SET HDAY = MMMM
SET BUSDAYS = _MTWTF_
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1);
END
TABLE FILE MOVIES
SUM COPIES NEWDATE NEXTDATE
ON TABLE SET PAGE NOPAGE
END

La salida muestra que el próximo día laborable, posterior a Noviembre 2, es Noviembre 4, ya que Noviembre 3 es festivo:

COPIES  NEWDATE     NEXTDATE  
------  -------     --------  
   117  2011/11/02  2011/11/04


Ejemplo: Cómo asignar el archivo de festivos a un miembro de PDS en z/OS, bajo una implementación de PDS

El siguiente archivo secuencial, que es el miembro HDAYMMMM en un PDS llamado USER1.HOLIDAY.DATA, define Noviembre 3, 2011 y Diciembre 24, 2011 como festivos:

20111103
20111224

La siguiente solicitud, basada en el origen de datos MOVIES, emplea el comando DYNAM para asignar este archivo como el archivo de festivos. El DDNAME en el comando DYNAM es HDAYMMMM, el nombre del miembro también es HDAYMMMM y el procedimiento emite el comando SET HDAY=MMMM. A continuación, define la fecha Noviembre 2, 2011 y calcula el próximo día laborable:

DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA(HDAYMMMM) SHR REU
SET HDAY = MMMM
SET BUSDAYS = _MTWTF_
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1);
END
TABLE FILE MOVIES
SUM COPIES NEWDATE NEXTDATE
ON TABLE SET PAGE NOPAGE
END

La salida muestra que el próximo día laborable, posterior a Noviembre 2, es Noviembre 4, ya que Noviembre 3 es festivo:

COPIES  NEWDATE     NEXTDATE  
------  -------     --------  
   117  2011/11/02  2011/11/04

Principio de página

x
Cómo activar los ceros a la izquierda en funciones de fechas y horas en Dialogue Manager

Cómo:

Si está usando una función de fechas y horas en Dialogue Manager, que devuelve un formato numérico de números enteros, Dialogue Manager trunca los ceros a la izquierda. Por ejemplo, si una función devuelve el valor 000101 (que indica Enero 1, 2000), Dialogue Manager trunca los ceros a la izquierda, resultando en 101, que es una fecha incorrecta. Para evitar este problema, use el parámetro LEADZERO.

LEADZERO sólo es compatible con expresiones que llamen directamente a una función. Las expresiones que incluyen anidamiento u otras funciones matemáticas, siempre truncan los ceros a la izquierda. Por ejemplo,

-SET &OUT = AYM(&IN, 1, 'I4')/100;

trunca los ceros a la izquierda independientemente de la configuración del parámetro LEADZERO.



x
Sintaxis: Cómo Establecer la visualización de ceros a la izquierda
SET LEADZERO = {ON|OFF}

donde:

ON

Muestra los ceros a la izquierda, si los hay.

OFF

Trunca los ceros a la izquierda. El valor por defecto es Desactivado.



Ejemplo: Cómo mostrar los ceros a la izquierda

La función AYM añade un mes a la fecha de entrada de Diciembre 1999:

-SET &IN = '9912';
-RUN
-SET &OUT = AYM(&IN, 1, 'I4');
-TYPE &OUT

Utilizando la propiedad LEADZERO por defecto, el resultado es:

1

Esto hace que la fecha Enero 2000 se represente incorrectamente. Establezca el parámetro LEADZERO del siguiente modo, en la solicitud:

SET LEADZERO = ON
-SET &IN = '9912';
-SET &OUT = AYM(&IN, 1, 'I4');
-TYPE &OUT

resulta en:

0001

Esto indica Enero 2000 de un modo correcto.


WebFOCUS