Esta es la duodécima entrega de la serie sobre utilidades para Business Central. En esta ocasión comparto dos funciones que permiten trabajar con el formato Unix Timestamp: uno de los formatos de fecha más habituales en integraciones con APIs externas y sistemas web. Si alguna vez has recibido un valor numérico enorme representando una fecha, casi seguro era un Unix Timestamp.

¡Vamos manos a la obra! 🕐


¿Qué es un Unix Timestamp?

Un Unix Timestamp es un número entero que representa los segundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC (conocido como "Unix Epoch"). Es el estándar más usado en APIs REST, sistemas web y mensajería para representar fechas de forma unívoca e independiente del huso horario.

Por ejemplo, el timestamp 1746403200 equivale a una fecha concreta en formato DateTime de Business Central.


🔢 De Unix Timestamp a DateTime: ConvertUnixTimestampToDateTime

procedure ConvertUnixTimestampToDateTime(Timestamp: BigInteger) ReturnValue: DateTime
var
    UnixTimestamp: Codeunit "Unix Timestamp";
begin
    Clear(UnixTimestamp);
    ReturnValue := UnixTimestamp.EvaluateTimestamp(Timestamp);
end;

¿Qué hace esta función?

Recibe un valor BigInteger que representa un Unix Timestamp (segundos desde el Epoch) y devuelve el DateTime equivalente en Business Central. Internamente delega en el codeunit estándar Unix Timestamp, que ya incorpora la lógica de conversión y el ajuste de zona horaria.

Paso a paso:

  1. Recibe el Timestamp: Un número del tipo BigInteger, que puede ser de muchos dígitos.
  2. Limpia el codeunit: Se hace Clear del codeunit estándar para garantizar estado limpio.
  3. Devuelve el DateTime: Se llama a EvaluateTimestamp, que convierte el número a un DateTime de AL.

Ejemplo práctico:

var
    Utils: Codeunit Utils;
    MyDateTime: DateTime;
begin
    MyDateTime := Utils.ConvertUnixTimestampToDateTime(1746403200);
    // MyDateTime contiene la fecha y hora equivalente
end;

📅 De DateTime a Unix Timestamp: ConvertDateTimeToUnixTimestamp

procedure ConvertDateTimeToUnixTimestamp(DateTimeFrom: DateTime) ReturnValue: BigInteger;
var
    UnixTimestamp: Codeunit "Unix Timestamp";
begin
    Clear(UnixTimestamp);
    ReturnValue := UnixTimestamp.CreateTimestampSeconds(DateTimeFrom);
end;

¿Qué hace esta función?

Es la operación inversa: dado un DateTime de Business Central, devuelve su representación como Unix Timestamp (BigInteger). Muy útil cuando necesitas enviar una fecha a una API externa que espera este formato.

Paso a paso:

  1. Recibe un DateTime: Puede ser cualquier valor DateTime válido en AL.
  2. Llama a CreateTimestampSeconds: El codeunit estándar calcula los segundos transcurridos desde el Epoch.
  3. Devuelve un BigInteger: Listo para enviarlo en el cuerpo de una petición HTTP o en un campo de integración.

Ejemplo práctico:

var
    Utils: Codeunit Utils;
    Timestamp: BigInteger;
begin
    Timestamp := Utils.ConvertDateTimeToUnixTimestamp(CurrentDateTime());
    // Timestamp contiene los segundos desde el Epoch hasta ahora
end;

💡 Beneficios y aplicaciones prácticas

Estas dos funciones son especialmente útiles en:

  • Integraciones con APIs REST que devuelven o esperan fechas en formato Unix Timestamp.
  • Almacenamiento de fechas en campos de texto o JSON donde el formato numérico es más seguro.
  • Comparación de fechas recibidas de sistemas externos con fechas internas de BC.
  • Logs o auditorías donde se necesita un formato de fecha universal e inequívoco.

Al apoyarse en el codeunit estándar Unix Timestamp de Business Central, las funciones son compatibles con cualquier versión moderna de BC SaaS y OnPrem.


Conclusión

En esta duodécima entrega de la serie Utils, muestro cómo convertir fechas entre el formato Unix Timestamp y el DateTime nativo de Business Central. Dos funciones pequeñas pero imprescindibles cuando se trabaja con integraciones externas que usan este estándar.

Para seguir todos los posts de esta serie, puedes encontrarlos bajo la etiqueta #UtilsBc.

Si quieres ver el código completo, está en GitHub.

¡Nos vemos en la próxima!