Spec-Zone.ru › C++

std::wcsftime

Определено в заголовочном файле <cwchar>
std::size_t wcsftime( wchar_t* str, std::size_t count, const wchar_t* format, const std::tm* time );

Преобразует информацию о дате и времени из заданного календарного времени time в строку широких символов с завершающим нулевым символом str в соответствии со строкой формата format. Записывается не более count широких символов.

Параметры

str - указатель на первый элемент массива wchar_t для вывода
count - максимальное количество широких символов для записи
format - указатель на строку широких символов с завершающим нулевым символом, задающую формат преобразования
time - указатель на преобразуемую информацию о дате и времени

Строка формата

Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов (за исключением %). Все обычные символы, включая завершающий нулевой символ, копируются в выходную строку без изменений. Каждая спецификация преобразования начинается с символа %, за которым может следовать модификатор E или O (игнорируется, если не поддерживается локалью), а затем символ, определяющий поведение спецификатора. Доступны следующие спецификаторы формата:

Спецификатор
преобразования
Описание Используемые поля
% записывает литерал %. Полная спецификация преобразования должна быть %%.
n
(C++11)
записывает символ новой строки
t
(C++11)
записывает символ горизонтальной табуляции
Год
Y записывает год десятичным числом, например 2017 tm_year
EY
(C++11)
записывает год в альтернативном представлении, например 平成23年 (23-й год эпохи Хэйсэй) вместо 2011年 (2011 год) для локали ja_JP tm_year
y записывает последние 2 цифры года десятичным числом (диапазон [00,99]) tm_year
Oy
(C++11)
записывает последние 2 цифры года с использованием альтернативной системы счисления, например 十一 вместо 11 для локали ja_JP tm_year
Ey
(C++11)
записывает год как смещение от начала периода альтернативного календаря локали %EC (зависит от локали) tm_year
C
(C++11)
записывает первые 2 цифры года десятичным числом (диапазон [00,99]) tm_year
EC
(C++11)
записывает название базового года (периода) в альтернативном представлении локали, например 平成 (эпоха Хэйсэй) для ja_JP tm_year
G
(C++11)
записывает год по неделям ISO 8601, то есть год, содержащий указанную неделю.

В ISO 8601 неделя начинается в понедельник, а первая неделя года должна удовлетворять следующим требованиям:

  • Включать 4 января
  • Включать первый четверг года
tm_year, tm_wday, tm_yday
g
(C++11)
записывает последние 2 цифры года по неделям ISO 8601, то есть года, содержащего указанную неделю (диапазон [00,99]).

В ISO 8601 неделя начинается в понедельник, а первая неделя года должна удовлетворять следующим требованиям:

  • Включать 4 января
  • Включать первый четверг года
tm_year, tm_wday, tm_yday
Месяц
b записывает сокращённое название месяца, например Oct (зависит от локали) tm_mon
h
(C++11)
синоним b tm_mon
B записывает полное название месяца, например October (зависит от локали) tm_mon
m записывает месяц десятичным числом (диапазон [01,12]) tm_mon
Om
(C++11)
записывает месяц с использованием альтернативной системы счисления, например 十二 вместо 12 для локали ja_JP tm_mon
Неделя
U записывает неделю года десятичным числом (первым днём недели считается воскресенье) (диапазон [00,53]) tm_year, tm_wday, tm_yday
OU
(C++11)
записывает неделю года, как для %U, с использованием альтернативной системы счисления, например 五十二 вместо 52 для локали ja_JP tm_year, tm_wday, tm_yday
W записывает неделю года десятичным числом (первым днём недели считается понедельник) (диапазон [00,53]) tm_year, tm_wday, tm_yday
OW
(C++11)
записывает неделю года, как для %W, с использованием альтернативной системы счисления, например 五十二 вместо 52 для локали ja_JP tm_year, tm_wday, tm_yday
V
(C++11)
записывает неделю года по ISO 8601 (диапазон [01,53]).

В ISO 8601 неделя начинается в понедельник, а первая неделя года должна удовлетворять следующим требованиям:

  • Включать 4 января
  • Включать первый четверг года
tm_year, tm_wday, tm_yday
OV
(C++11)
записывает неделю года, как для %V, с использованием альтернативной системы счисления, например 五十二 вместо 52 для локали ja_JP tm_year, tm_wday, tm_yday
День года/месяца
j записывает день года десятичным числом (диапазон [001,366]) tm_yday
d записывает день месяца десятичным числом (диапазон [01,31]) tm_mday
Od
(C++11)
записывает день месяца с нумерацией от нуля с использованием альтернативной системы счисления, например 二十七 вместо 27 для локали ja_JP

Односимвольное значение предваряется пробелом.

tm_mday
e
(C++11)
записывает день месяца десятичным числом (диапазон [1,31]).

Однозначное число предваряется пробелом.

tm_mday
Oe
(C++11)
записывает день месяца с нумерацией от единицы с использованием альтернативной системы счисления, например 二十七 вместо 27 для локали ja_JP

Односимвольное значение предваряется пробелом.

tm_mday
День недели
a записывает сокращённое название дня недели, например Fri (зависит от локали) tm_wday
A записывает полное название дня недели, например Friday (зависит от локали) tm_wday
w записывает день недели десятичным числом, где воскресенье — 0 (диапазон [0-6]) tm_wday
Ow
(C++11)
записывает день недели, где воскресенье — 0, с использованием альтернативной системы счисления, например 二 вместо 2 для локали ja_JP tm_wday
u
(C++11)
записывает день недели десятичным числом, где понедельник — 1 (формат ISO 8601) (диапазон [1-7]) tm_wday
Ou
(C++11)
записывает день недели, где понедельник — 1, с использованием альтернативной системы счисления, например 二 вместо 2 для локали ja_JP tm_wday
Час, минута, секунда
H записывает час десятичным числом в 24-часовом формате (диапазон [00-23]) tm_hour
OH
(C++11)
записывает час в 24-часовом формате с использованием альтернативной системы счисления, например 十八 вместо 18 для локали ja_JP tm_hour
I записывает час десятичным числом в 12-часовом формате (диапазон [01,12]) tm_hour
OI
(C++11)
записывает час в 12-часовом формате с использованием альтернативной системы счисления, например 六 вместо 06 для локали ja_JP tm_hour
M записывает минуту десятичным числом (диапазон [00,59]) tm_min
OM
(C++11)
записывает минуту с использованием альтернативной системы счисления, например 二十五 вместо 25 для локали ja_JP tm_min
S записывает секунду десятичным числом (диапазон [00,60]) tm_sec
OS
(C++11)
записывает секунду с использованием альтернативной системы счисления, например 二十四 вместо 24 для локали ja_JP tm_sec
Прочее
c записывает стандартную строку даты и времени, например Sun Oct 17 04:41:13 2010 (зависит от локали) все
Ec
(C++11)
записывает альтернативную строку даты и времени, например с использованием 平成23年 (23-й год эпохи Хэйсэй) вместо 2011年 (2011 год) для локали ja_JP все
x записывает локализованное представление даты (зависит от локали) все
Ex
(C++11)
записывает альтернативное представление даты, например с использованием 平成23年 (23-й год эпохи Хэйсэй) вместо 2011年 (2011 год) для локали ja_JP все
X записывает локализованное представление времени, например 18:40:20 или 6:40:20 PM (зависит от локали) все
EX
(C++11)
записывает альтернативное представление времени (зависит от локали) все
D
(C++11)
эквивалентно "%m/%d/%y" tm_mon, tm_mday, tm_year
F
(C++11)
эквивалентно "%Y-%m-%d" (формат даты ISO 8601) tm_mon, tm_mday, tm_year
r
(C++11)
записывает локализованное время в 12-часовом формате (зависит от локали) tm_hour, tm_min, tm_sec
R
(C++11)
эквивалентно "%H:%M" tm_hour, tm_min
T
(C++11)
эквивалентно "%H:%M:%S" (формат времени ISO 8601) tm_hour, tm_min, tm_sec
p записывает локализованное обозначение a.m. или p.m. (зависит от локали) tm_hour
z
(C++11)
записывает смещение относительно UTC в формате ISO 8601 (например, -0430) или ничего, если информация о часовом поясе недоступна tm_isdst
Z записывает зависящее от локали название или аббревиатуру часового пояса либо ничего, если информация о часовом поясе недоступна tm_isdst

Возвращаемое значение

Количество широких символов, записанных в массив широких символов, на который указывает str, не включая завершающий L'\0', при успешном выполнении. Если до сохранения всей строки был достигнут count, возвращается 0, а содержимое не определено.

Пример

#include <ctime>
#include <cwchar>
#include <iostream>
#include <locale>

int main()
{
    std::locale::global(std::locale("ja_JP.utf8"));
    std::time_t t = std::time(nullptr);
    wchar_t wstr[100];
    if (std::wcsftime(wstr, 100, L"%A %c", std::localtime(&t)))
        std::wcout << wstr << '\n';
}

Возможный вывод:

火曜日 2011年12月27日 17時43分13秒

См. также

strftime
преобразует объект std::tm в текстовое представление заданного формата
(функция)
put_time
(C++11)
форматирует и выводит значение даты/времени в соответствии с заданным форматом
(шаблон функции)
Документация по C для wcsftime

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/c/wcsftime

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API