直接设置struct tm属性的值不起作用

时间:2015-06-11 09:51:06

标签: c++ c strftime ctime

为什么asctime(ptr)什么都没有返回?结构的所有变量都有值。有人可以解释为什么会发生这种情况吗?

我也尝试使用strftime,但结果是一样的。

#include <iostream>
#include <ctime>
#include <new>
//#include <cstdio>

using namespace std;

int main(int argc,char *argv[])
{
    struct tm *ptr=new struct tm;
    //char buf[50];

    ptr->tm_hour=0;
    ptr->tm_mon=0;
    ptr->tm_year=0;
    ptr->tm_mday=0;
    ptr->tm_sec=0;
    ptr->tm_yday=0;
    ptr->tm_isdst=0;
    ptr->tm_min=0;
    ptr->tm_wday=0;

    cout << asctime(ptr);
    //strftime(buf,sizeof(char)*50,"%D",ptr);
    //printf("%s",buf);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

以下程序有效。用1删除零,它将起作用。

Ignore(x => x.HistoricDataColumnName)

这也有效:

    struct tm *ptr = new struct tm();
char buf[50];

ptr->tm_hour = 1;
ptr->tm_mon = 1;
ptr->tm_year = 1;
ptr->tm_mday = 1;
ptr->tm_sec = 1;
ptr->tm_yday = 1;
ptr->tm_isdst = 1;
ptr->tm_min = 1;
ptr->tm_wday = 1;
cout << asctime(ptr)

答案 1 :(得分:1)

如果asctime的任何成员超出正常范围,则struct tm的行为未定义。

如果日历日小于0(某些实现处理tm_mday==0表示前一个月的最后一天),则行为未定义。

请查看http://en.cppreference.com/w/cpp/chrono/c/asctimehttp://en.cppreference.com/w/cpp/chrono/c/tm了解详情。