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
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.
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.
SET BUSDAYS = smtwtfs
donde:
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:
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.
El siguiente código designa los días de trabajo como domingo, martes, miércoles, viernes y sábado:
SET BUSDAYS = S_TW_FS
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:
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).
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.
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:
Es una cadena de texto de cuatro caracteres.
SET HDAY = xxxx
donde:
Es la parte del nombre del archivo de festivos situada después de HDAY. Esta cadena debe tener cuatro caracteres de longitud.
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
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:
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.
Es el nombre de la aplicación en que reside el archivo de festivos.
Es la ruta al archivo de festivos.
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:
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.
Es el nombre completamente cualificado del archivo secuencial, o el PDS con el miembro HDAYxxxx, que contienen la lista 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:
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
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
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.
SET LEADZERO = {ON|OFF}
donde:
Muestra los ceros a la izquierda, si los hay.
Trunca los ceros a la izquierda. El valor por defecto es Desactivado.
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 |