Este documento está en desarrollo.
Estamos trabajando arduamente para mejorarlo.
Si desea colaborar, puede editarlo aquí: edit here (md).

Momentos

Para una representación estructurada de fecha y hora, XOScript utiliza el objeto Momento. En caso de que se imprima un nuevo objeto Momento en pantalla, se muestran la fecha y hora actuales:

Salida escribir: Momento nuevo, detener.

También es fácil leer los componentes de tiempo individuales. Así, por ejemplo, si solo es necesario conocer el año actual, se puede enviar el mensaje año al momento y, a su vez, la respuesta será un objeto Número que contiene únicamente el año:

>> m := Momento nuevo.
Salida escribir: m año bruto, stop.

Tenga en cuenta que el mensaje bruto debe enviarse al objeto Número resultante. Esto es para evitar la salida de 2,020 , que es, por supuesto, una notación correcta para números, sin embargo, no se usa normalmente en el contexto de notaciones de años. También es posible solicitar cuestiones que podrían ser menos obvias de determinar al principio, por ejemplo, el día de la semana (usando el mensaje día-semanal ):

>> m := Momento nuevo.
Salida escribir: m día-semanal, detener.

Aquí, el número 3 representa el martes. Un día laborable siempre comienza el 1 (domingo), el lunes representa el segundo día, el martes el tercer día, y así sucesivamente. El sábado es siempre el último día de la semana, según XOScript. De la misma manera, se puede recuperar el número de la semana (semana), así como los meses, días, horas, minutos y segundos. El siguiente ejemplo muestra cómo se crea un nuevo objeto Momento y cómo se pueden recuperar todos los componentes individuales de fecha y hora: el segundo, el minuto, la hora, el día, el mes, el día del año (dia-del-año), el día de la semana (día-semanal) y la zona horaria (zona).

>> ahora := Momento nuevo.
Salida escribir: ahora, detener.
Salida escribir: ahora segundo, detener.
Salida escribir: ahora minuto, detener.
Salida escribir: ahora hora, detener.
Salida escribir: ahora día, detener.
Salida escribir: ahora dia-del-año, detener.
Salida escribir: ahora día-semanal, detener.
Salida escribir: ahora mes, detener.
Salida escribir: ahora zona, detener.

Para cambiar uno de los componentes de tiempo, se envía un objeto Número. Por lo tanto, para modificar el segundero a 13, se hace:

>> m := Momento nuevo.
m segundo: 13.
Salida escribir: m, detener.

También es posible configurar otros componentes de tiempo usando año: , mes: , día: , hora: , minuto: , y segundo:

>> cuando := Momento nuevo
año: 2020,
mes: 12,
día: 31,
hora: 23,
minuto: 59,
segundo: 59.
Salida escribir: cuando, detener.

No es posible configurar ni cambiar el día de la semana ni el día del año. Tenga en cuenta que los ajustes deben ser de mayor a menor; de hecho, configurar un componente mayor borra los componentes menores. El siguiente ejemplo ilustra este principio:

>> cuando := Momento nuevo
año: 2020,
mes: 12,
día: 31,
hora: 23,
minuto: 59,
segundo: 59,
año: 2021.
Salida escribir: cuando, detener.
Esto mostrará:

En este caso, los componentes de tiempo más pequeños vuelven a sus valores iniciales, porque en el último momento se establece el año. Si selecciona un número demasiado alto para un componente de tiempo, el reloj seguirá contando de la manera habitual:

>> entonces := Momento nuevo
año: 2020,
mes: 2,
día: 30.
Salida escribir: entonces, detener.
El resultado será::
01/03/2020 00:00

En febrero nunca hay más de 29 días, por lo que el calendario cuenta desde el 1 de marzo. En este caso,2020 fue un año bisiesto. Si desea utilizar una notación diferente para la visualización del tiempo, simplemente combine los componentes del tiempo libremente:

>> pantalla := ['día mes año'].
>> fecha := Momento nuevo.
pantalla
año: fecha año bruto,
mes: fecha mes,
día: fecha día.
Salida escribir: display, detener.

No olvides tener en cuenta las distintas zonas horarias para evitar sorpresas. La zona horaria ( zona: ) en la variante británica de XOScript se mostrará como:

>> m := Momento nuevo.
Salida escribir: m zona, detener.

Al enviar el mensaje tiempo obtendrás la cantidad de segundos que han pasado desde el 1 de enero de 1970. Este es un punto de referencia en el tiempo a partir del cual la mayoría de las computadoras calculan la hora del sistema.

>> ahora := Momento nuevo tiempo.
Salida escribir: ahora, detener.

También puedes crear un nuevo Momento basado en una marca de tiempo como esta:

>> ahora := Momento nuevo: 0.
Salida escribir: ahora año bruto, detener.

Estas marcas de tiempo pueden ser útiles para compartir datos de tiempo con otros sistemas. También se pueden utilizar para crear una descripción elegante del tiempo, algo que se desea comúnmente en varios programas:

Momento en: ['describe'] hacer: {
>> ahora := Momento nuevo.
>> descripción := ['-'].
>> diferencia := ahora tiempo - yo tiempo.
{
(diferencia < 60) verdadero: {
descripción := ['ahora mismo'].
}, salir.
(diferencia < 3600) verdadero: {
>> minutos := (diferencia / 60) redondo.
descripción := ['hace algunos minutos'] algunos: minutos.
}, salir.
descripción := (
['día-mes-año']
día: (ahora día),
mes: (ahora mes),
año: (ahora año bruto)
).
} proceder.
<- descripción.
}.
>> m := Momento nuevo.
Salida escribir: m describe, detener.
>> m := Momento nuevo: (Momento nuevo tiempo - 1,500).
Salida escribir: m describe, detener.
>> m := Momento nuevo: (Momento nuevo tiempo - 5,000).
Salida escribir: m describe, detener.

Tenga en cuenta que en el ejemplo anterior, todo se coloca entre corchetes {}, seguido del mensaje proceder. Esta es una optimización para acelerar el programa. Al colocar todo en un bloque de proceso, se habilita el uso del mensaje salir después de cada condicional, para evitar que también se procesen condicionales excesivos. Para calcular los tiempos, simplemente sume cada componente de tiempo por separado. Por ejemplo, en caso de que desee saber qué hora será dentro de una hora:

>> m := Momento nuevo.
Salida escribir: m, detener.
m añadir: 1 hora.
Salida escribir: m, detener.

Vea cómo se aplica aquí un truco para mejorar la legibilidad: añadir: 1 hora. De hecho, el mensaje hora se envía a 1, que es un calificador (explicado en el capítulo 3). De la misma manera, puede agregar, por ejemplo, 100 segundos. No es necesario concentrarse en la conversión a las unidades correctas, ya que el objeto Momento lo hará por usted (usando el calificador).

Ahora, observemos un ejemplo más complicado sobre el uso de add: y subtract::

>> entonces := Momento nuevo
año: 2020,
mes: 2,
día: 29,
hora: 23,
minuto: 59,
segundo: 59,
restar: 1 segundo,
añadir: 2 segundo,
restar: 9000 hora.
Salida escribir: entonces, detener.

Para crear una copia de un momento, haga lo siguiente:

>> entonces := Momento nuevo.
>> ahora := entonces copiar.
Salida escribir: entonces = ahora, detener.
Salida escribir: (entonces es-igual-a: ahora), detener.

En el ejemplo anterior, se crea una copia del momento entonces. Ambos momentos describen el mismo punto en el tiempo, por lo que = da como resultado Verdadero. Sin embargo, tenga en cuenta que sigue siendo solo una copia, no el original. Debido a que físicamente es, de hecho, un objeto diferente, en una ubicación diferente en la memoria de la computadora, el mensaje es-igual-a: solo puede dar como resultado la respuesta Falso. Una característica adicional del objeto Momento es detener momentáneamente el proceso. Puede pausar la ejecución del programa utilizando el mensaje esperar: seguido del número de segundos. Eche un vistazo al siguiente ejemplo para ver una breve ilustración de este principio:

>> antes := Momento nuevo.
Momento esperar: 2.
>> después := Momento nuevo.
Salida escribir: antes, detener.
Salida escribir: despúes, detener.

Después de 2 segundos, el fragmento de programa anterior mostrará el resultado de dos momentos: el momento grabado antes de la pausa y el momento grabado después de esa pausa. Como resultado, las descripciones de tiempo en su pantalla deberían mostrar una diferencia de 2 segundos.