std::formatter<std::chrono::gps_time>
Definido en el archivo de encabezado <chrono> | ||
template<class Duration, class CharT> struct formatter<std::chrono::gps_time<Duration>, CharT>; | (desde C++20) | |
Una especialización de std::formatter que define las reglas de formato para un std::chrono::gps_time.
Si se usa %Z
, se reemplaza con "GPS" ampliado a CharT
. Si %z
o una variante modificada de lo mismo se usa, se dará formato a un desplazamiento de 0min
. La fecha y la hora formateadas son equivalentes a las formateadas para un std::chrono::sys_time inicializado con std::chrono::sys_time<Duration>(tp.time_since_epoch())+std::chrono::days(3657).
Por lo general, no se accede directamente a la especialización std::formatter, pero se usa a través de funciones de formato.
Contenido |
[editar]Especificación de formato
La especificación de formato tiene la forma
rellenar-y-alinear(opcional)anchura(opcional)precisión(opcional)L (opcional)espec-crono(opcional) | |||||||||
rellenar-y-alinear, anchura, y precisión tienen el mismo significado que en la especificación de formato estándar. precisión solo es válida para tipos std::chrono::duration donde el tipo de representación Rep
es un tipo de punto flotante, de lo contrario, se lanza std: :format_error.
La configuración regional utilizada para formatear se determina de la siguiente manera:
- la configuración regional por defecto de "C" si
L
no está presente en la especificación de formato, - de lo contrario, la configuración regional denotada por std::locale se pasa a la función de formateo, si la hay,
- de lo contrario (
L
está presente pero no se pasa una configuración regional, std::locale, a la función de formateo), la configuración regional global.
La especificación espec-crono consta de uno o más especificadores de conversión y caracteres ordinarios (distintos de {
, }
y %
). Una especificación espec-crono debe comenzar con un especificador de conversión. Todos los caracteres ordinarios se escriben en la salida sin modificaciones. Cada especificador de conversión sin modificar comienza con un carácter %
seguido de un carácter que determina el comportamiento del especificador. Algunos especificadores de conversión tienen una forma modificada en la que se inserta un carácter modificador E
o O
después del carácter %
. Cada especificador de conversión se reemplaza por los caracteres apropiados en la salida, como se describe a continuación.
Si la especificación espec-crono está vacía, el objeto crono se formatea como si se emitiera a un flujo de salida os
de tipo std::stringstream con la configuración regional de formato (una de std::locale::classic(), el objeto std::locale pasado, y std::locale::global()) imbuida y se copiara os.str() al búfer de salida con relleno adicional y ajustes según los especificadores de formato.
Los siguientes especificadores de formato están disponibles:
Especificador de conversión | Explicación | |
---|---|---|
%% | Escribe un literal de carácter % . | |
%n | Escribe un carácter de nueva línea. | |
%t | Escribe un carácter de tabulador horizontal. | |
Año | ||
%C %EC | Escribe el año dividido por 100 usando división piso. Si el resultado es un solo dígito decimal, tiene el prefijo 0. El comando modificado | |
%y %Oy %Ey | Escribe los dos últimos dígitos decimales del año. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado El comando modificado | |
%Y %EY | Escribe el año como un número decimal. Si el resultado tiene menos de cuatro dígitos, se rellena a la izquierda con 0 a cuatro dígitos. El comando modificado | |
Mes | ||
%b %h | Escribe el nombre abreviado del mes de la configuración regional. | |
%B | Escribe el nombre completo del mes de la configuración regional. | |
%m %Om | Escribe el mes como un número decimal (enero es 01 ). Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
Día | ||
%d %Od | Escribe el día del mes como un número decimal. Si el resultado es un solo dígito decimal, tiene el prefijo 0. El comando modificado | |
%e %Oe | Escribe el día del mes como un número decimal. Si el resultado es un solo dígito decimal, se antepone un espacio. El comando modificado | |
Día de la semana | ||
%a | Escribe el nombre abreviado del día de la semana de la configuración regional. | |
%A | Escribe el nombre completo del día de la semana de la configuración regional. | |
%u %Ou | Escribe el día de la semana ISO como un número decimal (1-7), donde el lunes es 1 . El comando modificado | |
%w %Ow | Escribe el día de la semana como un número decimal (0-6), donde el domingo es 0 . El comando modificado | |
Año basado en semanas ISO 8601 | ||
En ISO 8601 las semanas comienzan con el lunes y la primera semana del año debe cumplir con los siguientes requisitos:
| ||
%g | Escribe los dos últimos dígitos decimales del año basado en semanas ISO 8601. Si el resultado es un solo dígito, tiene el prefijo 0. | |
%G | Escribe el año basado en semanas ISO 8601 como un número decimal. Si el resultado tiene menos de cuatro dígitos, se rellena a la izquierda con 0 a cuatro dígitos. | |
%V %OV | Escribe la semana del año ISO 8601 como un número decimal. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
Semana/día del año | ||
%j | Escribe el día del año como un número decimal (el 1 de enero es 001 ). Si el resultado tiene menos de tres dígitos, se rellena a la izquierda con 0 a tres dígitos. | |
%U %OU | Escribe el número de semana del año como un número decimal. El primer domingo del año es el primer día de la semana 01. Los días del mismo año anteriores al primer domingo están en la semana 00. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
%W %OW | Escribe el número de semana del año como un número decimal. El primer lunes del año es el primer día de la semana 01. Los días del mismo año anteriores al primer lunes están en la semana 00. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
Fecha | ||
%D | Equivalente a "%m/%d/%y" . | |
%F | Equivalente a "%Y-%m-%d" . | |
%x %Ex | Escribe la representación de la fecha de la configuración regional. El comando modificado | |
Hora del día | ||
%H %OH | Escribe la hora (reloj de 24 horas) como un número decimal. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
%I %OI | Escribe la hora (reloj de 12 horas) como un número decimal. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
%M %OM | Escribe el minuto como un número decimal. Si el resultado es un solo dígito, tiene el prefijo 0. El comando modificado | |
%S %OS | Escribe el segundo como un número decimal. Si el número de segundos es menor que 10, el resultado tiene el prefijo 0. Si la precisión de la entrada no se puede representar exactamente con segundos, entonces el formato es un número de punto flotante decimal con un formato fijo y una precisión que coincide con la precisión de la entrada (o con una precisión de microsegundos si la conversión a segundos decimales de punto flotante no se puede hacer dentro de los 18 dígitos fraccionarios). El carácter del punto decimal se localiza según la configuración regional. El comando modificado | |
%p | Escribe el equivalente de la configuración regional de las designaciones AM/PM asociadas con un reloj de 12 horas. | |
%R | Equivalente a "%H:%M" . | |
%T | Equivalente a "%H:%M:%S" . | |
%r | Escribe la hora del reloj de 12 horas de la configuración regional. | |
%X %EX | Escribe la representación de la hora del día de la configuración regional. El comando modificado | |
Huso horario | ||
%z %Ez %Oz | Escribe el desplazamiento de UTC en el formato ISO 8601. Por ejemplo, -0430 se refiere a 4 horas y 30 minutos detrás de UTC. Si el desplazamiento es cero, se usa +0000 . Los comandos modificados | |
%Z | Escribe la abreviatura del huso horario. | |
Misceláneos | ||
%c %Ec | Escribe la representación de la fecha y hora de la configuración regional. El comando modificado |
Se reconocen los siguientes especificadores, pero provocarán que se lance std::format_error:
Especificador de conversión | Explicación | |
---|---|---|
Cuenta de la duración | ||
%Q | Escribe la cuenta de ticks de la duración, es decir, el valor obtenido a través de count(). | |
%q | Escribe el sufijo de la unidad de la duración, como se especifica en operator<<(). |
[editar]Ejemplo
#include <iostream>#include <format>#include <chrono> int main(){std::chrono::time_point<std::chrono::utc_clock> epoch; std::cout<<std::format("El tiempo de la época de Unix fue {0:%F}T{0:%R%z}.", epoch);}
Salida:
El tiempo de la época de Unix fue 1970-01-01T00:00+0000.
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
P2372R3 | C++20 | Se usaba formatter en la configuración regional global o la configuración regional que se pasaba. | Se usa la configuración regional por defecto "C" cuando L está ausente. |
[editar]Véase también
(C++20) | Almacena una representación formateada de los argumentos en una cadena nueva. (plantilla de función) |