Spec-Zone.ru › C++

std::asctime

Определено в заголовочном файле <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 — четырёхзначный год из 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", тогда как в других локалях строка формата "%a %b %e %H:%M:%S %Y\n" может соответствовать выводу std::asctime точнее, но не всегда будет совпадать с ним полностью.

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 << "locale " << localeName << ":\n" << std::left;
        std::locale::global(std::locale(localeName));

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

        // strftime output for comparison:
        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';
    }
}

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

locale 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

locale 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

locale 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

locale 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

См. также

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

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

Spec-Zone.ru

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