std::chrono::is_am, std::chrono::is_pm, std::chrono::make12
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <chrono>
|
||
constexpr bool is_am( const std::chrono::hours& h ) noexcept; |
(1) | (начиная с C++20) |
constexpr bool is_pm( const std::chrono::hours& h ) noexcept; |
(2) | (начиная с C++20) |
constexpr std::chrono::hours make12( const std::chrono::hours& h ) noexcept; |
(3) | (начиная с C++20) |
constexpr std::chrono::hours make24( const std::chrono::hours& h, bool is_pm ) noexcept; |
(4) | (начиная с C++20) |
Эти функции помогают переводить время суток между 12-часовым форматом и 24-часовым форматом времени суток.
1) Определяет, является ли время в 24-часовом формате a.m. (ante meridiem, до полудня).
2) Определяет, является ли время в 24-часовом формате p.m. (post meridiem, после полудня).
3) Возвращает 12-часовой эквивалент времени в 24-часовом формате.
4) Возвращает 24-часовой эквивалент времени в 12-часовом формате
h, где is_pm определяет, является ли время p.m.Параметры
| h | — | 12-часовой или 24-часовой формат времени для обнаружения |
| is_pm | — | является ли время 12-часового формата p.m. |
Возвращаемое значение
1)
0h <= h && h <= 11h.2)
12h <= h && h <= 23h.3) Если
h находится в диапазоне [0h, 23h], возвращает 12-часовой эквивалент в диапазоне [1h, 12h]. Иначе возвращаемое значение не указано.4) Если
h находится в диапазоне [1h, 12h], возвращает 24-часовой эквивалент в диапазоне [0h, 11h], если is_pm равно false или находится в диапазоне [12h, 23h] иначе. Иначе возвращаемое значение не указано.Пример
Запустить этот код
#include <iostream>
#include <iomanip>
#include <utility>
#include <chrono>
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() << "ч == "
<< std::setw(2) << am.count() << (is_am(hh) ? "ч a.m.\n" : "ч 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 ? "ч p.m." : "ч a.m.")
<< " == " << std::setw(2)
<< make24(hh, pm).count() << "ч\n";
}
}
Вывод:
make12():
0ч == 12ч a.m.
1ч == 1ч a.m.
11ч == 11ч a.m.
12ч == 12ч p.m.
13ч == 1ч p.m.
23ч == 11ч p.m.
make24():
1ч a.m. == 1ч
12ч a.m. == 0ч
1ч p.m. == 13ч
12ч p.m. == 12ч