Xojo 2019r2: Nueva Clase DateTime

A continuación puedes leer sobre la nueva clase DateTime introducida en Xojo a partir de la verisón 2019r2. Este artículo es una traducción al Español del post original publicado por William Yu en el Blog de Xojo.

La nueva clase DateTime introducida en Xojo 2019r2 tiene como objetivo sustituir la clase Date que pasará ahora a estar deprecada. Echemos un vistazo ahora a como se comparan ambas clases:

Date

Mutable (puedes cambiar cualquiera de sus propiedades sin tener que crear una nueva instancia de Date)

En principio esto suena genial, pero puedes incurrir en algunas fechas ambiguas en función del orden de la operación. Por ejemplo:

Dim d As New Date(2019, 2, 28)    // 28 de febrero de 2019
d.Day = 31   // ¿31 de febrero de 2019?
d.Month = 3

En realidad, dado que el 31 de febrero no es una fecha válida hemos de forzarla en una, y en este caso se trata de pasar esos tres días a Marzo, de modo que una vez que el día se ha ajustado a 31, la fecha actual ahora es 3 de marzo de 2019; probablemente no lo que quería el usuario.

  • Utiliza un TimeZone local (no hay modo de usar una franja horaria diferente)

Considera vivir en California e intentar determinar la hora en Nueva York. Con la clase Date, tendrías que calcular tu mismo la diferencia horaria.

  • Usa los ajustes locales para el formato de la cadena de fecha (no hay modo de utilizar un formato local diferente)

Si estás intentando mostrar algo para tu tu compadre Español o Francés, y estás en una región de habla inlesa, tendrás que hacer el formato de cadena tu mismo.

GMTOffset fijo (no comprende los cambios de horario de verano)

El GMTOffset siempre se corresponde con el la diferencia actual de TimeZone, salvo que se haya indicado específicamente en uno de los constructores de Date.

Nuevo DateTime

Es inmutable (no se puede cambiar ninguna de sus propiedades, tienes que crear un nuevo DateTime)

Si bien esto puede verse como más restrictivo, esto proporciona protección contra la definición de fechas ambiguas. Puedes utilizar DateInterval y/o DateTime.AddInterval para manipular la fecha que se devuelve como un nuevo objeto DateTime.

Soporte de Zona horaria

Cada objeto de DateTime puede asociarse con una franja horaria (TimeZone) diferente. Puedes ver un listado con todos los nombre soportados para TimeZon en este enlace.

Los formatos de Fecha tienen soporte local

En vez de estar sujeto a presentar una cadena de fecha en el formto local, puedes indicar un formato diferente en el que se mostrará la cadena formateada de fecha.

Soporte de cambio de horario de verano

Una franja horaria (TimeZone) siempre está asociada con un objeto DateTime (si no se indica ninguno entonces se utiliza el TimeZone actual). Puedes utilizar TimeZone.SecondsFromGMTOffset para determinar si la Fecha se encuentra en horario de verano.

Comportamiento en los límites del cambio de hora de verano

Cuando el cambio de horario de verano finaliza el 3 de noviembre de 2019 a las 2:00am la fecha retrocederá una hora de modo que en realidad estaremos en el 3 de noviembre de 2019 a la 1:00am. De modo que, ¿cómo maneja Xojo el caso donde un usuario ajusta la fecha al 3 de noviembre de 2019 a la 1:00am? ¿Es justo antes del cambio de hora o después? La respuesta es, después, con el GMTOffset de TimeZone ajustado correctamente.

Para más información sobre la nueva clase DateTime, accede a la página de documentación disponible en este enlace

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *