Bienvenidos sean a este post, hoy comenzaremos hablando de otras de las librerias basicas que utiliza Lua como es la del S.O.

Anuncios

En ella tenemos funciones que nos permiten manipular archivos, para conseguir la hora y fecha del sistema (el tema de hoy) asi como otras aplicaciones del sistema, lamentablemente por el tema de la portabilidad y que esta se basa en el estandar ANSI C no tendremos algunas funciones disponibles para nuestro lenguaje, como por ejemplo manipular directorios, pero eso podemos extenderlo por medio de librerias que no son parte de la instalacion base de Lua, por ejemplo la libreria posix la cual agrega todas las funciones relacionadas a POSIX, sin embargo como dijimos antes para manipular archivos tenemos a disposicion os.rename para cambiar el nombre del archivo y os.remove para remover (borrar) un archivo, una vez introducido el concepto basico de esta libreria pasemos al tema de hoy.

Anuncios

Las dos funciones, date y time, se encargan de dar toda la funcionalidad para la hora y fecha en Lua, cuando se llama a la funcion time sin ningun argumento esta devuelve la hora y fecha actual codificado como un numero (en la mayoria de los sistemas es el tiempo Unix), cuando es llamado con una tabla devuelve un numero representando la fecha y hora descripto por la tabla, tales tablas de fechas tienen los siguientes campos importantes:

CampoDescripcion
yearUn año completo
month01-12
day01-31
hour00-23
min00-59
sec00-59
isdstun booleano, devuelve true si tiene horario de verano
Nota: La hora Unix es el tiempo transcurrido en segundos desde el 01/01/1970 hasta la fecha con la que se compara.
Anuncios

Los tres primeros campos son obligatorios, los otros tienen un valor predeterminado al mediodia (12:00:00) cuando no son provistos, como Cordoba, Argentina se encuentra a tres horas al oeste de Greenwich obtendremos el siguiente resultado si usamos a os.time de la siguiente forma:

> print(os.time{year=1970,month=1,day=1,hour=0})
10800
> print(os.time{year=1970,month=1,day=1,hour=0,min=0,sec=1})
10801
> print(os.time{year=1970,month=1,day=1,hour=12})
54000
Anuncios

El resultado 10800 equivale a 3 horas y en el caso de 54000 al valor anterior mas 12 horas obviamente todo esto expresado en segundos.

Anuncios

La funcion date, mas alla de su nombre es una especie de funcion inversa a time ya que convierte un numero representando la fecha y hora de vuelta a una representacion de alto nivel, su primer parametro es string.format describiendo la representacion que queremos, el segundo es el numero fecha-hora, su predeterminado es la hora y fecha actual, para producir una tabla de fecha usamos la cadena de formato “*t”, por ejemplo la llamada os.date(“*t”, 906000490) devuelve la siguiente tabla:

{year=1998, month=9, day=16, yday=259, wday=4, hour=23, min=48, sec=10, isdst=false}
Anuncios

Como pueden ver mas alla de los campos que usa os.time, la tabla creada por os.date tambien nos da el dia de la semana (wday), y el dia del año (yday), para wday se considera que el domingo equivale a 1 y para yday el primer dia es 1ero. de Enero, para otras cadenas de formato la funcion os.date formatea la fecha como una cadena que es una copia de la cadena de formato donde etiquetas especificas fueron reemplazadas por informacion especifica de la hora y la fecha, todas las etiquetas estan representadas por % y una letra, como se ve en el siguiente ejemplo:

> print(os.date("Hoy es %A, en %B"))
Hoy es Tuesday, en November
> print(os.date("%x", 1572993047))
11/05/19
Anuncios

Todas las representaciones siguen la configuracion local, por ejemplo en una ubicacion de Argentina-Español, el %B resultaria en “Noviembre” y %x en 05/11/19, en la siguiente tabla veremos cada etiqueta con su significado:

EtiquetaDescripcion
%aNombre abreviado del dia
%ANombre completo del dia
%bNombre abreviado del mes
%BNombre completo del mes
%cdia y hora
%ddia del mes [01-31]
%HHora, usando un reloj de 24 Hs. [00-23]
%IHora, usando un reloj de 12 Hs. [01-12]
%MMinutos [0-59]
%mmes [01-12]
%pMuestra “am” o “pm” segun corresponda
%SSegundos [00-59]
%wDia de la semana [0-6 = Domnigo – Sabado]
%xFecha
%XHora
%YAño completo con 4 digitos
%yAño con 2 digitos
%%El caracter %
Anuncios

Si llamamos a date sin ningun argumento de forma predeterminada usara a %c, lo que equivale a la informacion completa de fecha y hora en un formato razonable, la representacion de para %x, %X y %c cambia de acuerdo a la configuracion local y el sistema, si necesitas una representacion fija como yyyy/mm/dd debes usar una cadena de formato tal como “%Y/%m%d”, por ultimo la funcion os.clock devuelve los segundos del tiempo de CPU para el programa, su uso mas comun es como benchmark como se ve a continuacion:

local x = os.clock()
local s = 0
for i = 1,100000 do s = s + 1 end
print(string.format("Tiempo transcurrido: %.2f\n", os.clock() - x))
Anuncios

Primero almacena el valor de os.clock en una variable x, luego iniciamos una variable s con cero, despues usaremos un bucle for que incrementa a s pero en realidad servira como excusa para hacer una pausa, para finalmente mostrarnos el tiempo transcurrido a traves de string.format con un decimal flotante de digitos decimales, y el valor a mostrar es la diferencia entre el valor actual de os.clock y el que almacenamos en x, si lo probamos deberemos tener una salida semejante a esta:

Tiempo transcurrido: 0.01
Anuncios

En resumen, hoy hemos visto como manipular el tiempo en Lua, tanto con time como con date, sus diferentes argumentos y como influyen sobre los mismos, como trabaja en verdad, como podemos formatear dicha realidad para que pueda ser interpretada por humanos, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00