std::chrono:: is_am, std::chrono:: is_pm, std::chrono:: make12, std::chrono:: make24
From cppreference.net
|
Definido en el encabezado
<chrono>
|
||
|
constexpr
bool
is_am
(
const
std::
chrono
::
hours
&
h
)
noexcept
;
|
(1) | (desde C++20) |
|
constexpr
bool
is_pm
(
const
std::
chrono
::
hours
&
h
)
noexcept
;
|
(2) | (desde C++20) |
|
constexpr
std::
chrono
::
hours
make12
(
const
std::
chrono
::
hours
&
h
)
noexcept
;
|
(3) | (desde C++20) |
|
constexpr
std::
chrono
::
hours
make24
(
const
std::
chrono
::
hours
&
h,
bool is_pm ) noexcept ; |
(4) | (desde C++20) |
Estas funciones ayudan a traducir entre una hora del día en formato de 12 horas y una hora del día en formato de 24 horas.
1)
Detecta si el formato de 24 horas es a.m. (
ante meridiem
, antes del mediodía).
2)
Detecta si la hora en formato de 24 horas es p.m. (
post meridiem
, después del mediodía).
3)
Devuelve el equivalente en formato 12 horas de una hora en formato 24 horas.
4)
Devuelve el equivalente de 24 horas de un tiempo en formato de 12 horas
h
, donde
is_pm
determina si el tiempo es p.m.
Parámetros
| h | - | Formato de hora de 12 o 24 horas a detectar |
| is_pm | - | si la hora en formato de 12 horas es p.m. |
Valor de retorno
1)
0h
<=
h
&&
h
<=
11h
2)
12h
<=
h
&&
h
<=
23h
3)
Si
h
está en el rango
[
0h
,
23h
]
, retorna el equivalente de 12 horas en el rango
[
1h
,
12h
]
. De lo contrario, el valor de retorno no está especificado.
4)
Si
h
está en el rango
[
1h
,
12h
]
, devuelve el equivalente en formato 24 horas en el rango
[
0h
,
11h
]
si
is_pm
es
false
, o en el rango
[
12h
,
23h
]
en caso contrario. De lo contrario, el valor de retorno no está especificado.
Ejemplo
Ejecutar este código
#include <chrono> #include <iomanip> #include <iostream> #include <utility> int main() { using namespace std::chrono; static_assert( is_am(10h) && is_am(11h) && !is_am(12h) && !is_am(23h) && !is_pm(10h) && !is_pm(11h) && is_pm(12h) && is_pm(23h) ); std::cout << "make12():\n"; for (const hours hh : {0h, 1h, 11h, 12h, 13h, 23h}) { const hours am{make12(hh)}; std::cout << std::setw(2) << hh.count() << "h == " << std::setw(2) << am.count() << (is_am(hh) ? "h a.m.\n" : "h p.m.\n"); } std::cout << "\nmake24():\n"; using p = std::pair<hours, bool>; for (const auto& [hh, pm] : {p{1h, 0}, p{12h, 0}, p{1h, 1}, p{12h, 1}}) { std::cout << std::setw(2) << hh.count() << (pm ? "h p.m." : "h a.m.") << " == " << std::setw(2) << make24(hh, pm).count() << "h\n"; } }
Salida:
make12(): 0h == 12h a.m. 1h == 1h a.m. 11h == 11h a.m. 12h == 12h p.m. 13h == 1h p.m. 23h == 11h p.m. make24(): 1h a.m. == 1h 12h a.m. == 0h 1h p.m. == 13h 12h p.m. == 12h