wcsftime
Определено в заголовочном файле <wchar.h> | ||
|---|---|---|
size_t wcsftime( wchar_t* str, size_t count, const wchar_t* format, const struct tm* time ); | (начиная с C95) |
Преобразует информацию о дате и времени из заданного календарного времени time в строку широких символов str с завершающим нулевым символом в соответствии со строкой формата format. Записывается не более count байт.
Параметры
| str | - | указатель на первый элемент массива wchar_t для вывода |
| count | - | максимальное количество широких символов для записи |
| format | - | указатель на строку широких символов с завершающим нулевым символом, задающую формат преобразования |
Строка формата
Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов (за исключением %). Все обычные символы, включая завершающий нулевой символ, копируются в выходную строку без изменений. Каждая спецификация преобразования начинается с символа %, за которым может следовать модификатор E или O (игнорируется, если не поддерживается локалью), а затем символ, определяющий поведение спецификатора. Доступны следующие спецификаторы формата:
| Спецификатор преобразования | Пояснение | Используемые поля |
|---|---|---|
% | записывает литерал %. Спецификация преобразования целиком должна быть %%. | |
n(C99) | записывает символ новой строки | |
t(C99) | записывает символ горизонтальной табуляции | |
| Год | ||
Y | записывает год в виде десятичного числа, например 2017 |
tm_year |
EY(C99) | записывает год в альтернативном представлении, например 平成23年 (23-й год эры Хэйсэй) вместо 2011年 (2011 год) в локали ja_JP |
tm_year |
y | записывает последние 2 цифры года в виде десятичного числа (диапазон [00,99]) |
tm_year |
Oy(C99) | записывает последние 2 цифры года с использованием альтернативной системы счисления, например 十一 вместо 11 в локали ja_JP |
tm_year |
Ey(C99) | записывает год как смещение от альтернативного календарного периода локали %EC (зависит от локали) |
tm_year |
C(C99) | записывает первые 2 цифры года в виде десятичного числа (диапазон [00,99]) |
tm_year |
EC(C99) | записывает название базового года (периода) в альтернативном представлении локали, например 平成 (эра Хэйсэй) в ja_JP |
tm_year |
G(C99) | записывает год по неделям ISO 8601, то есть год, содержащий указанную неделю. В ISO 8601 неделя начинается в понедельник, и первая неделя года должна соответствовать следующим требованиям:
|
tm_year, tm_wday, tm_yday |
g(C99) | записывает последние 2 цифры года по неделям ISO 8601, то есть года, содержащего указанную неделю (диапазон [00,99]). В ISO 8601 неделя начинается в понедельник, и первая неделя года должна соответствовать следующим требованиям:
|
tm_year, tm_wday, tm_yday |
| Месяц | ||
b | записывает сокращённое название месяца, например Oct (зависит от локали) |
tm_mon |
Ob(C23) | записывает сокращённое название месяца в альтернативном представлении локали |
tm_mon |
h(C99) | синоним b |
tm_mon |
B | записывает полное название месяца, например October (зависит от локали) |
tm_mon |
OB(C23) | записывает соответствующее полное название месяца в альтернативном представлении локали |
tm_mon |
m | записывает месяц в виде десятичного числа (диапазон [01,12]) |
tm_mon |
Om(C99) | записывает месяц с использованием альтернативной системы счисления, например 十二 вместо 12 в локали ja_JP |
tm_mon |
| Неделя | ||
U | записывает неделю года в виде десятичного числа (первый день недели — воскресенье) (диапазон [00,53]) |
tm_year, tm_wday, tm_yday |
OU(C99) | записывает неделю года, как и %U, с использованием альтернативной системы счисления, например 五十二 вместо 52 в локали ja_JP |
tm_year, tm_wday, tm_yday |
W | записывает неделю года в виде десятичного числа (первый день недели — понедельник) (диапазон [00,53]) |
tm_year, tm_wday, tm_yday |
OW(C99) | записывает неделю года, как и %W, с использованием альтернативной системы счисления, например 五十二 вместо 52 в локали ja_JP |
tm_year, tm_wday, tm_yday |
V(C99) | записывает неделю года по ISO 8601 (диапазон [01,53]). В ISO 8601 неделя начинается в понедельник, и первая неделя года должна соответствовать следующим требованиям:
|
tm_year, tm_wday, tm_yday |
OV(C99) | записывает неделю года, как и %V, с использованием альтернативной системы счисления, например 五十二 вместо 52 в локали ja_JP |
tm_year, tm_wday, tm_yday |
| День года/месяца | ||
j | записывает день года в виде десятичного числа (диапазон [001,366]) |
tm_yday |
d | записывает день месяца в виде десятичного числа (диапазон [01,31]) |
tm_mday |
Od(C99) | записывает день месяца с нумерацией от нуля, используя альтернативную систему счисления, например 二十七 вместо 27 в локали ja_JP Перед одиночным символом ставится пробел. |
tm_mday |
e(C99) | записывает день месяца в виде десятичного числа (диапазон [1,31]). Перед одной цифрой ставится пробел. |
tm_mday |
Oe(C99) | записывает день месяца с нумерацией от единицы, используя альтернативную систему счисления, например 二十七 вместо 27 в локали ja_JP Перед одиночным символом ставится пробел. |
tm_mday |
| День недели | ||
a | записывает сокращённое название дня недели, например Fri (зависит от локали) |
tm_wday |
A | записывает полное название дня недели, например Friday (зависит от локали) |
tm_wday |
w | записывает день недели в виде десятичного числа, где воскресенье — 0 (диапазон [0-6]) |
tm_wday |
Ow(C99) | записывает день недели, где воскресенье — 0, с использованием альтернативной системы счисления, например 二 вместо 2 в локали ja_JP |
tm_wday |
u(C99) | записывает день недели в виде десятичного числа, где понедельник — 1 (формат ISO 8601) (диапазон [1-7]) |
tm_wday |
Ou(C99) | записывает день недели, где понедельник — 1, с использованием альтернативной системы счисления, например 二 вместо 2 в локали ja_JP |
tm_wday |
| Часы, минуты, секунды | ||
H | записывает часы в виде десятичного числа в 24-часовом формате (диапазон [00-23]) |
tm_hour |
OH(C99) | записывает часы в 24-часовом формате с использованием альтернативной системы счисления, например 十八 вместо 18 в локали ja_JP |
tm_hour |
I | записывает часы в виде десятичного числа в 12-часовом формате (диапазон [01,12]) |
tm_hour |
OI(C99) | записывает часы в 12-часовом формате с использованием альтернативной системы счисления, например 六 вместо 06 в локали ja_JP |
tm_hour |
M | записывает минуты в виде десятичного числа (диапазон [00,59]) |
tm_min |
OM(C99) | записывает минуты с использованием альтернативной системы счисления, например 二十五 вместо 25 в локали ja_JP |
tm_min |
S | записывает секунды в виде десятичного числа (диапазон [00,60]) |
tm_sec |
OS(C99) | записывает секунды с использованием альтернативной системы счисления, например 二十四 вместо 24 в локали ja_JP |
tm_sec |
| Прочее | ||
c | записывает стандартную строку даты и времени, например Sun Oct 17 04:41:13 2010 (зависит от локали) | все |
Ec(C99) | записывает альтернативную строку даты и времени, например с использованием 平成23年 (23-й год эры Хэйсэй) вместо 2011年 (2011 год) в локали ja_JP | все |
x | записывает локализованное представление даты (зависит от локали) | все |
Ex(C99) | записывает альтернативное представление даты, например с использованием 平成23年 (23-й год эры Хэйсэй) вместо 2011年 (2011 год) в локали ja_JP | все |
X | записывает локализованное представление времени, например 18:40:20 или 6:40:20 PM (зависит от локали) | все |
EX(C99) | записывает альтернативное представление времени (зависит от локали) | все |
D(C99) | эквивалентно "%m/%d/%y" |
tm_mon, tm_mday, tm_year |
F(C99) | эквивалентно "%Y-%m-%d" (формат даты ISO 8601) |
tm_mon, tm_mday, tm_year |
r(C99) | записывает локализованное время в 12-часовом формате (зависит от локали) |
tm_hour, tm_min, tm_sec |
R(C99) | эквивалентно "%H:%M" |
tm_hour, tm_min |
T(C99) | эквивалентно "%H:%M:%S" (формат времени ISO 8601) |
tm_hour, tm_min, tm_sec |
p | записывает локализованное обозначение a.m. или p.m. (зависит от локали) |
tm_hour |
z(C99) | записывает смещение относительно UTC в формате ISO 8601 (например, -0430) или не записывает никаких символов, если информация о часовом поясе недоступна |
tm_isdst |
Z | записывает зависящее от локали название или аббревиатуру часового пояса либо не записывает никаких символов, если информация о часовом поясе недоступна |
tm_isdst |
Возвращаемое значение
Количество широких символов, записанных в массив широких символов, на который указывает str, без учёта завершающего L'\0' при успешном выполнении. Если count достигнуто до того, как удалось сохранить всю строку, возвращается 0, а содержимое не определено.
Пример
#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
int main(void)
{
wchar_t buff[40];
struct tm my_time =
{
.tm_year = 112, // = year 2012
.tm_mon = 9, // = 10th month
.tm_mday = 9, // = 9th day
.tm_hour = 8, // = 8 hours
.tm_min = 10, // = 10 minutes
.tm_sec = 20 // = 20 secs
};
if (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
printf("%ls\n", buff);
else
puts("wcsftime failed");
setlocale(LC_ALL, "ja_JP.utf8");
if (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
printf("%ls\n", buff);
else
puts("wcsftime failed");
}
Вывод:
Sunday Sun Oct 9 08:10:20 2012 日曜日 2012年10月09日 08時10分20秒
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.29.5.1 Функция wcsftime (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.29.5.1 Функция wcsftime (стр.: 230-231)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.29.5.1 Функция wcsftime (стр.: 439-440)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.24.5.1 Функция wcsftime (стр.: 385-386)
См. также
преобразует объект tm в пользовательское текстовое представление (функция) |
|
Документация C++ для wcsftime |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/chrono/wcsftime