El formato de fecha RFC1123 | C# | Azure

Intermedio

Cuando trabajamos en escenarios de software con un despliegue en múltiples culturas, temas como el manejo de las fechas se vuelve engorroso y delicado, por lo cual es conveniente tener un buen soporte para localización de las aplicaciones.

Multipliquemos esa complejidad por un conjunto de servicios en la nube disponibles en tiempo real para miles de usuarios y donde la fecha ( con horas , minutos y segundos) son el componente fundamental de la lógica de funcionamiento… sino se maneja un formato único de hora puede ser un verdadero apocalipsis.

Para evitar este tipo de problemas existe RFC1123 – Time format. RFC es la sigla de Request For Comments, es decir no es propiamente un estándar pero si esta muy cerca de serlo, y en el caso de RFC1123 podemos hablar de un estándar de facto al menos en cuanto a fechas se refiere.

Utilizando la información de fechas según este RFC nos evitamos muchos problemas en aplicaciones localizadas, ya que independientemente del Cliente donde se despliegue la UI, en el backend tenemos un formato de fecha ampliamente conocido y soportado por la mayoría de desarrolladores y herramientas a nivel mundial.

El RFC1123 establece un formato de fecha independiente de la cultura y localización

  • La hora siempre se menciona respecto a la hora del meridiano de Greenwich (Greenwich Mean Time)
  • Los meses siempre son abreviaciones en inglés de la siguiente manera: "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
  • Los días siempre son abreviaciones en inglés de la siguiente manera: "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
  • Este es un ejemplo de fecha en RFC1123: "Mon, 19 Nov 1979 10:45:00 GMT".

En la plataforma Azure este es el formato de fecha utilizado para realizar llamadas a través de sus API’s expuestas por REST, esto es, cada vez que hacemos uso de los headers

  • Date
  • x-ms-date

Debemos asignarles una cadena que representa una fecha en RFC1123.

En C# podemos conseguir una fecha representada en una cadena RFC1123 de la siguiente forma:

 //obtenemos la fecha o el offset de fecha según sea el caso
var dateTimeOffsetUtcNow = DateTimeOffset.UtcNow;  
//obtenemos cadena con formato RFC1123
string utcDateInRfc1123Format = dateTimeOffsetUtcNow.ToString("R", CultureInfo.InvariantCulture);