名稱空間
變體
操作

std::asctime

來自 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 中的三字母英文縮寫星期幾,可以是 MonTueWedThuFriSatSun 中的一個。
  • Mmm - time_ptr->tm_mon 中的三字母英文縮寫月份名,可以是 JanFebMarAprMayJunJulAugSepOctNovDec 中的一個。
  • 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 年,則行為未定義。

該函式不支援本地化,且換行符無法移除。

該函式修改靜態儲存且非執行緒安全。

目錄

[edit] 引數

time_ptr - 指向 std::tm 物件的指標,指定要列印的時間

[edit] 返回值

指向靜態空終止字串的指標,該字串包含日期和時間的文字表示。該字串可能在 std::asctimestd::ctime 之間共享,並且在每次呼叫這些函式時都可能被覆蓋。

[edit] 注意

此函式返回指向靜態資料的指標,且非執行緒安全。POSIX 將此函式標記為過時,並推薦使用依賴於區域設定的 std::strftime。在 std::locale("C") 中,std::strftime 格式字串 "%c\n" 將與 std::asctime 輸出完全匹配,而在其他區域設定中,格式字串 "%a %b %e %H:%M:%S %Y\n" 可能更接近但不總是完全匹配。

POSIX 僅將未定義行為限制在輸出字串長於 25 個字元,或 timeptr->tm_wdaytimeptr->tm_mon 不在預期範圍內,或 timeptr->tm_year 超過 INT_MAX-1990 的情況。

某些實現將 timeptr->tm_mday == 0 視為前一個月的最後一天。

[edit] 示例

#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

[edit] 參閱

std::time_t 物件轉換為文字表示
(函式) [編輯]
std::tm 物件轉換為自定義文字表示
(函式) [編輯]
(C++11)
根據指定格式格式化並輸出日期/時間值
(函式模板) [編輯]
C 文件asctime