名前空間
変種
操作

std::asctime

From cppreference.com
< cpp‎ | chrono‎ | c
 
 
 
 
ヘッダ <ctime> で定義
char* asctime( const std::tm* time_ptr );

指定されたカレンダー時刻 std::tm を、以下の固定25文字形式のテキスト表現に変換します: Www Mmm dd hh:mm:ss yyyy\n

  • Www - time_ptr->tm_wday からの3文字の英語略式曜日名。Mon, Tue, Wed, Thu, Fri, Sat, Sun のいずれか。
  • Mmm - time_ptr->tm_mon からの3文字の英語略式月名。Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec のいずれか。
  • dd - timeptr->tm_mday からの2桁の日。 sprintf%2d を使用して表示した場合と同様。
  • hh - timeptr->tm_hour からの2桁の時間。 sprintf%.2d を使用して表示した場合と同様。
  • mm - timeptr->tm_min からの2桁の分。 sprintf%.2d を使用して表示した場合と同様。
  • ss - timeptr->tm_sec からの2桁の秒。 sprintf%.2d を使用して表示した場合と同様。
  • yyyy - timeptr->tm_year + 1900 からの4桁の年。 sprintf%4d を使用して表示した場合と同様。

*time_ptr のいずれかのメンバーが通常の範囲外にある場合、動作は未定義です。

time_ptr->tm_year が示す暦年が4桁より大きい、または1000年未満の場合、動作は未定義です。

この関数はローカライゼーションをサポートしておらず、改行文字を削除することはできません。

この関数は静的ストレージを変更するため、スレッドセーフではありません。

目次

[編集] Parameters

time_ptr - 印刷する時刻を指定する std::tm オブジェクトへのポインタ

[編集] Return value

日付と時刻のテキスト表現を保持する、ヌル終端された静的文字列へのポインタ。この文字列は、std::asctimestd::ctime の間で共有される可能性があり、これらの関数のいずれかが呼び出されるたびに上書きされる可能性があります。

[編集] Notes

この関数は静的データを返すため、スレッドセーフではありません。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_yearINT_MAX-1990 を超える場合にのみ、未定義の動作を制限します。

一部の実装では、 timeptr->tm_mday == 0 を、前の月の最終日と解釈します。

[編集] Example

#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

[編集] See also

std::time_t オブジェクトをテキスト表現に変換する
(関数) [編集]
std::tm オブジェクトをカスタムのテキスト表現に変換する
(関数) [編集]
(C++11)
指定されたフォーマットに従って日付/時刻の値をフォーマットして出力する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)