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

std::asctime

Материал из cppreference.com
< cpp | chrono | c
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, 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++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 
Утилиты даты и времени в стиле C
Функции
Манипуляции временем
Преобразование форматов
Константы
Типы
(C++17)
 
<tbody> </tbody>
Определено в заголовочном файле <ctime>
char* asctime( const std::tm* time_ptr );

Преобразует заданное календарное время std::tm в текстовое представление следующей фиксированной 25-символьной формы: Www Mmm dd hh:mm:ss yyyy\n

  • Www - трёхбуквенное английское сокращение дня недели из time_ptr->tm_wday, одно из Mon, Tue, Wed, Thu, Fri, Sat, Sun.
  • Mmm - трёхбуквенное английское сокращенное название месяца из time_ptr->tm_mon, одно из Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec.
  • dd - двузначный день месяца из timeptr->tm_mday, как если бы он был напечатан sprintf с использованием %2d
  • hh - двузначный час из timeptr->tm_hour, как если бы он был напечатан sprintf с использованием %.2d
  • mm - двузначные минуты из timeptr->tm_min, как если бы они были напечатаны sprintf с использованием %.2d
  • ss - двузначные секунды из timeptr->tm_sec, как если бы они были напечатаны sprintf с использованием %.2d
  • yyyy - 4-значный год из timeptr->tm_year + 1900, как если бы он был напечатан sprintf с использованием %4d

Поведение не определено, если какой-либо элемент *time_ptr находится за пределами своего нормального диапазона

Поведение не определено, если календарный год, указанный time_ptr->tm_year, имеет более 4 цифр или меньше 1000 года.

Функция не поддерживает локализацию, и символ новой строки нельзя удалить.

Функция изменяет статическую память и не является потокобезопасной.

Параметры

time_ptr указатель на объект std::tm, определяющий время для печати

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

Указатель на статическую строку символов с завершающим нулём, содержащую текстовое представление даты и времени. Строка может совместно использоваться std::asctime и std::ctime и может перезаписываться при каждом вызове любой из этих функций.

Примечание

Эта функция возвращает указатель на статические данные и не является потокобезопасной. POSIX помечает эту функцию как устаревшую и вместо неё рекомендует использовать std::strftime, зависящую от локали. В std::locale("C") строка формата std::strftime "%c\n" будет точно совпадать с выводом std::asctime, в то время как в других локалях в строке формата "%a %b %e %H:%M:%S %Y\n" будет потенциально более близкое, но не всегда точное совпадение.

POSIX ограничивает неопределённое поведение только в случаях, когда выходная строка будет длиннее 25 символов, когда timeptr->tm_wday или timeptr->tm_mon не находятся в ожидаемых диапазонах или когда timeptr->tm_year превышает INT_MAX-1990.

Некоторые реализации обрабатывают timeptr->tm_mday==0 как означающее последний день предыдущего месяца.

Пример

#include <ctime>
#include <iomanip>
#include <iostream>

int main()
{
    const std::time_t now = std::time(nullptr);

    for (const char *localeName : {"C", "en_US.utf8", "de_DE.utf8", "ja_JP.utf8" }) {
        std::cout << "локаль " << localeName << ":\n" << std::left;
        std::locale::global(std::locale(localeName));

        std::cout << std::setw(40) << "    asctime" << std::asctime(std::localtime(&now));

        // вывод strftime для сравнения:
        char buf[64];
        if (strftime(buf, sizeof buf, "%c\n", std::localtime(&now))) {
            std::cout << std::setw(40) << "    strftime %c" << buf;
        }

        if (strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %Y\n", std::localtime(&now))) {
            std::cout << std::setw(40) << "    strftime %a %b %e %H:%M:%S %Y" << buf;
        }

        std::cout << '\n';
    }
}

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

локаль C:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Wed Nov  4 00:45:01 2020
    strftime %a %b %e %H:%M:%S %Y       Wed Nov  4 00:45:01 2020

локаль en_US.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Wed 04 Nov 2020 12:45:01 AM UTC
    strftime %a %b %e %H:%M:%S %Y       Wed Nov  4 00:45:01 2020

локаль de_DE.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Mi 04 Nov 2020 00:45:01 UTC
    strftime %a %b %e %H:%M:%S %Y       Mi Nov  4 00:45:01 2020

локаль ja_JP.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         2020年11月04日 00時45分01秒
    strftime %a %b %e %H:%M:%S %Y       水 11月  4 00:45:01 2020

Смотрите также

преобразует объект std::time_t в текстовое представление
(функция) [править]
преобразует объект std::tm в пользовательское текстовое представление
(функция) [править]
(C++11)
форматирует и выводит значение даты/времени в соответствии с указанным форматом
(шаблон функции) [править]