代码之家  ›  专栏  ›  技术社区  ›  Jonathan Mee

put\U time是否有一个转换说明符,该说明符输出一个月中的一位数天数,且不带前置字符

  •  0
  • Jonathan Mee  · 技术社区  · 7 年前

    put_time 为每月的输出日期提供2个转换说明符:

    1. %d :“月日,零填充(01-31)”
    2. %e :“月日,填充空格(1-31)”

    请注意,这两个转换说明符都不允许我输出一个月中的非填充日。例如,给定 tm tmb ,如果要将每月的日期输出为:

    2018年2月8日

    我可以做到: cout << put_time(&tmb, "%b%e '%y")

    但是在10号 th公司 将输出:

    2018年2月10日

    因此,我必须做一些简单的事情: cout << put_time(&tmb, "%b ") << tmb.tm_mday << put_time(&tmb, " '%y")

    是否有一个转换说明符,我可以使用它在一个单一的 put\u时间 呼叫

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jonathan Mee    7 年前

    为了回答这个问题,我从下面列出了一个转换说明符的综合列表: http://en.cppreference.com/w/cpp/io/manip/put_time 然后把它们捆成 simple program :

    tm tmb = { 5, 6, 7, 8, 9, 10 };
    
    mktime(&tmb);
    
    for(const auto i : { "%%", "%n", "%t", "%Y", "%EY", "%y", "%Oy", "%Ey", "%C", "%EC", "%G", "%g", "%b", "%h", "%B", "%m", "%Om", "%U", "%OU", "%W", "%OW", "%V", "%OV", "%j", "%d", "%Od", "%e", "%Oe", "%a", "%A", "%w", "%Ow", "%u", "%Ou", "%H", "%OH", "%I", "%OI", "%M", "%OM", "%S", "%OS", "%c", "%Ec", "%x", "%Ex", "%X", "%EX", "%D", "%F", "%r", "%R", "%T", "%p", "%z", "%Z" } ) {
        cout << i << "\t|\t\"" << put_time(&tmb, i) << "\"\n";
    }
    

    其输出如下所示:

    %%  |   "%"
    %n  |   "
    "
    %t  |   "   "
    %Y  |   "1910"
    %EY |   "1910"
    %y  |   "10"
    %Oy |   "10"
    %Ey |   "10"
    %C  |   "19"
    %EC |   "19"
    %G  |   "1910"
    %g  |   "10"
    %b  |   "Oct"
    %h  |   "Oct"
    %B  |   "October"
    %m  |   "10"
    %Om |   "10"
    %U  |   "40"
    %OU |   "40"
    %W  |   "40"
    %OW |   "40"
    %V  |   "40"
    %OV |   "40"
    %j  |   "281"
    %d  |   "08"
    %Od |   "08"
    %e  |   " 8"
    %Oe |   " 8"
    %a  |   "Sat"
    %A  |   "Saturday"
    %w  |   "6"
    %Ow |   "6"
    %u  |   "6"
    %Ou |   "6"
    %H  |   "07"
    %OH |   "07"
    %I  |   "07"
    %OI |   "07"
    %M  |   "06"
    %OM |   "06"
    %S  |   "05"
    %OS |   "05"
    %c  |   "Sat Oct  8 07:06:05 1910"
    %Ec |   "Sat Oct  8 07:06:05 1910"
    %x  |   "10/08/10"
    %Ex |   "10/08/10"
    %X  |   "07:06:05"
    %EX |   "07:06:05"
    %D  |   "10/08/10"
    %F  |   "1910-10-08"
    %r  |   "07:06:05 AM"
    %R  |   "07:06"
    %T  |   "07:06:05"
    %p  |   "AM"
    %z  |   "+0000"
    %Z  |   "UTC"
    

    所讨论的领域是 tmb.tm_mday 其中填充了 8 . 因此,这里需要的是“8”表中的值。快速搜索将证明没有。因此,您的问题的答案是: 没有任何转换说明符可以输出月份中没有前导字符的一位数天数。 你必须使用类似于你在问题中提出的解决方法。