Пространства имён
Варианты
Действия

std::chrono::is_am, std::chrono::is_pm, std::chrono::make12

Материал из cppreference.com
< cpp‎ | chrono
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Определено в заголовочном файле <chrono>
constexprbool is_am(conststd::chrono::hours& h )noexcept;
(1) (начиная с C++20)
constexprbool is_pm(conststd::chrono::hours& h )noexcept;
(2) (начиная с C++20)
constexprstd::chrono::hours make12(conststd::chrono::hours& h )noexcept;
(3) (начиная с C++20)
constexprstd::chrono::hours make24(conststd::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 находится в диапазоне [0h23h], возвращает 12-часовой эквивалент в диапазоне [1h12h]. Иначе возвращаемое значение не указано.
4) Если h находится в диапазоне [1h12h], возвращает 24-часовой эквивалент в диапазоне [0h11h], если is_pm равно false или находится в диапазоне [12h23h] иначе. Иначе возвращаемое значение не указано.

[править]Пример

#include <iostream>#include <iomanip>#include <utility>#include <chrono>   int main(){usingnamespace 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(constauto&[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ч
close