FreeToGenerate.com

Formatea una fecha como lo hace strftime y te dice de qué estándar sale cada token, que es la columna que todas las chuletas se dejan. No se sube nada.

Todo lo que no sea una conversión se copia tal cual. Cada token de abajo se coteja con el estándar del que viene.

Prueba una:
7 mar 2026

Token a token

TokenLo defineProduce
%-dC897
%bC89mar
%YC892026

Los niveles son las marcas de la propia página del manual: lo que va sin marcar es ANSI C, y el resto lleva C99, SU, TZ o GNU.

Lo que conviene saber de esta cadena

  • %-d Una bandera sin anchura mínima de campo. POSIX dice que el resultado no está especificado justo para esto: quiere el par, o sea %03d y no %0d. glibc acepta la forma suelta, que es la que recomiendan todos los tutoriales, y también es la razón de que CPython en Windows lance ValueError con %-d.

  • %-d Esta bandera es una extensión de glibc. POSIX define exactamente dos: el cero y el signo más. El guion bajo, el guion, el acento circunflejo y la almohadilla son propios de glibc, y una biblioteca C que no los implemente puede rechazar la cadena entera en vez de ignorar la bandera.

  • %b La salida depende de la configuración regional de la biblioteca C, así que la misma cadena produce un texto distinto en una máquina configurada de otro modo. Esta página la representa con el idioma en el que la estás leyendo.

Las 42 conversiones

ConversiónLo defineProduce
%aregionalC89sáb
%AregionalC89sábado
%bregionalC89mar
%BregionalC89marzo
%cregionalC897 mar 2026, 9:05:03
%CSingle UNIX Specification20
%dC8907
%DSingle UNIX Specification03/07/26
%eSingle UNIX Specification 7
%FC992026-03-07
%GPaquete de zonas horarias de Olson2026
%gPaquete de zonas horarias de Olson26
%hSingle UNIX Specificationmar
%HC8909
%IC8909
%jC89066
%kPaquete de zonas horarias de Olson 9
%lPaquete de zonas horarias de Olson 9
%mC8903
%MC8905
%nSingle UNIX Specification
%pregionalC89AM
%Pregionalglibcam
%rregionalSingle UNIX Specification09:05:03 a. m.
%RSingle UNIX Specification09:05
%sPaquete de zonas horarias de Olson1772874303
%SC8903
%tSingle UNIX Specification
%TSingle UNIX Specification09:05:03
%uSingle UNIX Specification6
%UC8909
%VSingle UNIX Specification10
%wC896
%WC8909
%xregionalC897/3/26
%XregionalC899:05:03
%yC8926
%YC892026
%zSingle UNIX Specification+0000
%ZregionalC89UTC
%+Paquete de zonas horarias de Olson%+
%%C89%

42 / 42 mostradas

Lo que produce cada una con la fecha de arriba, en vez de una descripción, porque la salida es la respuesta. Una fila marcada depende de la configuración regional.

Todo esto corre en tu navegador. No se sube nada.

También disponible en: English · Português · Français · العربية

Códigos de formato strftime: qué produce cada uno y quién lo define

Escribe una cadena de formato, mira el resultado token a token y averigua cuáles de tus tokens no sobrevivirán a un cambio de plataforma.

Qué son los códigos de formato de strftime

strftime es la función de la biblioteca de C que convierte una fecha en texto, y su cadena de formato es una tira de caracteres normales con especificaciones de conversión intercaladas. Cada una es un signo de porcentaje seguido de una letra: %Y es el año de cuatro cifras, %m el mes con cero delante, %d el día. Todo lo que no sea una conversión se copia sin tocarlo, y por eso %Y-%m-%d da una fecha con guiones sin que haya que pedirlo.

El mismo lenguaje aparece mucho más allá de C. Python, Ruby, PHP, R, Perl, awk, el date de GNU y el propio shell aceptan cadenas strftime, y casi todos se la pasan tal cual a la biblioteca de C de la máquina en vez de implementarla ellos. De ahí que la portabilidad sea una cuestión viva y no una nota al pie: los códigos que acepta tu programa los decide la máquina donde corre.

Hay 42 conversiones en total, y no vienen todas del mismo sitio. Unas están en el estándar C de 1989, una llegó con C99, doce vienen de la Single UNIX Specification, seis del paquete de zonas horarias de Olson —el mismo proyecto que te da la base de datos de zonas horarias— y una de la propia glibc. Todas las chuletas publicadas aplanan eso en una única lista, que es justo la información que hace falta cuando una cadena funciona en tu portátil y no en producción.

Cómo se usa

  1. Escribe o elige una cadena de formato. Los botones de ejemplo cubren una fecha de todos los días, una totalmente portable, una línea de log de Apache, la fecha de semana ISO y otra armada con las dos colisiones reales de la sintaxis.
  2. Fija la fecha y la hora. Las dos se leen como UTC, así que el resultado depende solo de lo que escribas. La tabla de referencia de abajo se vuelve a calcular con el instante que elijas, que suele ser más rápido que leer una descripción.
  3. Lee el desglose y las notas. Cada conversión aparece con el estándar que la define y con lo que produjo. Las notas de abajo cubren lo que merece saberse: una bandera que no es de POSIX, una conversión más allá de C89 o una salida que cambia con la configuración regional.

Dónde se rompe de verdad la portabilidad, medido

Lo primero que uno supone es que la línea de peligro es el nivel: quédate en C89 y estás a salvo, sal a la Single UNIX Specification y no. Medido sobre dos implementaciones, esa frontera casi no muerde. CPython en Windows acepta las 22 conversiones de C89 y las 12 de la Single UNIX Specification, incluidas %e, %F y %T. Una página construida sobre las marcas de nivel estaría describiendo un precipicio que en buena parte se ha erosionado.

Lo que sí se rompe son las banderas, que son un mecanismo aparte del que las marcas de nivel no dicen nada. POSIX define exactamente dos banderas, el cero y el signo más, además de una anchura mínima de campo, y acto seguido declara que el resultado no está especificado si se pone una bandera sin anchura mínima, o una anchura sin bandera. Así que hasta %0d queda fuera del estándar: POSIX quiere el par, %03d. glibc, en cambio, define cinco banderas —guion bajo, guion, cero, acento circunflejo y almohadilla— y acepta todas sueltas.

Por eso el truco de strftime más recomendado de internet es justo el que se rompe. %-d, para quitar el cero de delante, es una extensión de glibc en una forma que POSIX llama no especificada, y en CPython sobre Windows no se degrada en silencio: lanza ValueError. Lo mismo con %_d, %s, %P, %k y %l, que GNU responde sin rechistar.

Los modos de fallo son asimétricos, y esa es la parte que conviene llevarse. Windows falla a gritos con %-d, lo cual es molesto pero se corrige solo. El apaño al que se recurre entonces, %#d, es la grafía de Microsoft para quitar el cero de delante, y glibc le da a ese mismo carácter un sentido completamente distinto. En glibc la almohadilla es «caso contrario», que no le hace nada a un campo numérico, así que %#d devuelve 07 y no 7. Y no es que la bandera se ignore: %#A sí devuelve SATURDAY, que es como se sabe que la está procesando. Un carácter, dos definiciones y ningún error por ninguno de los dos lados.

Dos colisiones en la sintaxis y una limitación honesta

El signo más es a la vez una bandera de POSIX y una conversión que recoge la página del manual, en la misma posición. Así que %+4Y es una bandera con anchura, mientras que %+ a solas es una conversión que significa la fecha en el formato de date(1). La página del manual resuelve la segunda de una manera poco común: recoge la conversión y luego dice que glibc2 no la admite. Comprobado: el date de GNU devuelve los dos caracteres sin tocarlos, que es lo que hace también esta página.

La otra colisión es %G contra %Y. %G es el año basado en semanas de ISO 8601, y discrepa del año natural unos pocos días alrededor del Año Nuevo. El 1 de enero de 2027 es viernes, así que pertenece a la semana ISO 53 de 2026: %G-W%V da 2026-W53, mientras que %Y-W%V da 2027-W53, una semana que no existe, porque 2027 solo tiene 52. Barriendo los cuarenta años que van de 2000 a 2039, los dos discrepan en 68 días de 14.610, o sea el 0,47 por ciento: nunca más de tres días en un mismo año, menos de dos de media y en algunos años ninguno. Esa es la peor frecuencia posible para darse cuenta de un fallo.

La limitación honesta es la configuración regional. Once de las 42 conversiones producen texto que la biblioteca de C saca de la configuración vigente: los nombres de día y de mes, las marcas de mañana y tarde, y las tres que representan una fecha o una hora enteras según la convención local. Esta página las representa con el idioma en el que la estás leyendo, que es una respuesta razonable y no es la misma que dará tu servidor. Nada de lo que hay aquí puede decirte cómo representará %c una máquina con otra configuración regional, y una herramienta que dijera lo contrario estaría adivinando.

Dos cosas menores. Todo se formatea como UTC, así que %z siempre es +0000 y %Z siempre es UTC; un programa real formatea en la zona que le hayan pasado. Y %s, los segundos desde la época, está en el paquete de zonas horarias y no en ningún estándar de C, que es por lo que es una de las conversiones que Windows rechaza de plano.

¿Por qué es gratis?

Convertir una fecha en texto es aritmética y una tabla de consulta, y las dos cosas corren en tu navegador. No hay servidor en medio, así que no hay nada que cobrar ni cuenta que crear.

No se sube nada. Recarga la página y habrá olvidado tu cadena de formato.