Object获取与第一个C ++相同的数据

时间:2015-11-12 19:40:24

标签: c++ class object time time.h

我这堂课有问题。当我只创建这个类的一个对象时,一切正常。它向我展示了它应该的日期。但每当我尝试创建第二个并打印出日期时,它只显示第二个对象的数据。我不知道自己做错了什么。

 #include <iostream>
    #include <string>
    #include <time.h>
    #include <conio.h>

using namespace std;


class convData {


public:

//constructori

    convData(long dataUnix){

        this->mytime = dataUnix;
        this->mytm = NULL;
        this->mytm = gmtime(&this->mytime);
        this->wDay = NULL;
        cout <<endl<<"Address:"<< &this->mytime;//noticed that this address is exactly the same as the one of the object created in main


    }

    ~convData(){
        if (this->wDay != NULL)
            delete[] wDay;
    }


//interfata 

    void setDataUnix(long dataUnix){
        if (dataUnix >= 0)
            this->mytime = dataUnix;
        else
            throw new exception("Data incorecta");

    }
    void setSec(int sec)
    {
        if (sec >= 0 && sec <= 59)
            this->mytm->tm_sec = sec;
        else
            throw new exception("Numarul de secunde este incorect.");

    }
    void setMin(int min){

        if (min >= 0 && min <= 59)
            this->mytm->tm_min = min;
        else
            throw new exception("Numarul de minute este incorect.");

    }
    void setHour(int hour)
    {
        if (hour >= 0 && hour <= 23)
            this->mytm->tm_hour = hour;
        else
            throw new exception("Ora este gresita.");

    }
    void setMday(int mDay)
    {
        if (mDay >= 1 && mDay <= 31)
            this->mytm->tm_mday = mDay;
        else
            throw new exception("Ziua lunii incorecta.");
    }
    void setMonth(int month)
    {
        if (month >= 1 && month <= 11)
            this->mytm->tm_mon = month - 1;
        else
            throw new exception("Luna este gresita");
    }
    void setYear(int year)
    {
        if (year >= 1970 && year <= 9999)
            this->mytm->tm_year = year - 1900;
        else
            throw new exception("Anul este gresit");

    }
    void setWeekDay(string weekDay){

        if (weekDay.compare("Duminica") == 0)
            this->mytm->tm_wday=0;
        else
            if (weekDay.compare("Luni") == 0)
                this->mytm->tm_wday = 1;
        else
        if (weekDay.compare("Marti") == 0)
            this->mytm->tm_wday = 2;
        else
        if (weekDay.compare("Miercuri") == 0)
            this->mytm->tm_wday = 3;
        else 
            if (weekDay.compare("Joi") == 0)
            this->mytm->tm_wday = 4;
        else
        if (weekDay.compare("Vineri") == 0)
            this->mytm->tm_wday = 5;
        else
        if (weekDay.compare("Sambata") == 0)
            this->mytm->tm_wday = 6;
        else
            throw new exception("Ziua saptamanii incorecta.");
    }
    void setYearDay(int yearDay){
        if (yearDay >= 1 && yearDay <= 366)
            this->mytm->tm_yday = yearDay - 1;
        else
            throw new exception("Ziua din an incorecta.");


    }
    void setDST(int DST)
    {
        if (DST == -1)
            this->mytm->tm_isdst = DST;
        else
        if (DST == 0)
            this->mytm->tm_isdst = DST;
        else
        if (DST >= 1)
            this->mytm->tm_isdst = DST;
        else
            throw new exception("DST gresit.");
    }

    int getSec()
    {
        return this->mytm->tm_sec;
    }
    int getMin()
    {
        return this->mytm->tm_min;
    }
    int getHour(){
        return this->mytm->tm_hour;
    }
    int getMday(){
        return this->mytm->tm_mday;
    }
    int getMonth(){
        return this->mytm->tm_mon+1;
    }
    int getYear(){
        return (this->mytm->tm_year + 1900);
    }
    char * getWeekDay(){

        if (this->mytm->tm_wday == 0)
        {
            this->wDay = new char[strlen("Duminica") + 1];
            strcpy(this->wDay, "Duminica");
            return this->wDay;

        }
        else if (this->mytm->tm_wday == 1)
        {

            this->wDay = new char[strlen("Luni") + 1];
            strcpy(this->wDay, "Luni");
            return this->wDay;
        }

        else if (this->mytm->tm_wday == 2)
        {
            this->wDay = new char[strlen("Marti") + 1];
            strcpy(this->wDay, "Marti");
            return this->wDay;

        }
        else if (this->mytm->tm_wday == 3)
        {
            this->wDay = new char[strlen("Miercuri") + 1];
            strcpy(this->wDay, "Miercuri");
            return this->wDay;
        }
        else if (this->mytm->tm_wday == 4)
        {
            this->wDay = new char[strlen("Joi") + 1];
            strcpy(this->wDay,"Joi");
            return this->wDay;
        }
        else if (this->mytm->tm_wday == 5)
        {
            this->wDay = new char[strlen("Vineri") + 1];
            strcpy(this->wDay, "Vineri");
            return this->wDay;
        }
        else if (this->mytm->tm_wday == 6)
        {
            this->wDay = new char[strlen("Sambata") + 1];
            strcpy(this->wDay, "Sambata");
            return this->wDay;
        }
        else
            return "\0";

}
    int getYearDay()
    {
        return this->mytm->tm_yday + 1;
    }
    int getDST(){
        return this->mytm->tm_isdst;
    }
    long getDataUnix(){
        long dataUnix = this->mytime;
        return dataUnix;
    }



    void afisareData(){


                cout << endl << getWeekDay();
                cout << " " << getMday()<<  "-"<< getMonth();
                cout << "-" << getYear() << " " << getHour() << ":";
                if (getMin() < 10)
                    cout << "0" << getMin();
                else
                    cout << getMin();
                if (getSec() < 10)
                    cout << ":0" << getSec();
                else
                    cout<<":" << getSec();
                cout << endl;

    }

private:

    time_t mytime;
    struct tm *mytm;
    char * wDay;
    /*struct tm {
                       int tm_sec;    /// Seconds (0-60)
                       int tm_min;     // Minutes (0-59)
                       int tm_hour;   // Hours (0-23)
                       int tm_mday;   // Day of the month (1-31)
                       int tm_mon;    // Month (0-11)
                       int tm_year;   // Year - 1900
                       int tm_wday;   // Day of the week (0-6, Sunday = 0)
                       int tm_yday;   // Day in the year (0-365, 1 Jan = 0)
                       int tm_isdst;  // Daylight saving time
    };*/


};
void main(){
convData convObj(1439467747);
convData convObj2(1439469232);
cout << endl<<"First object address:" << &convObj;
cout <<endl;
convObj.afisareData();
cout << endl;
convObj2.afisareData();
}

1 个答案:

答案 0 :(得分:0)

来自gmtime()文档here

  

将epoch(时间指向的time_t值)后的给定时间转换为日历时间,以struct tm格式的协调世界时(UTC)表示。 结果存储在静态存储中,并返回指向该静态存储的指针

您正在使用相同的指针。

示例:

    struct tm *temp;
    time_t t1;
    time_t t2;

    t1 = 1439467747;
    t2 = 1439469232;

    temp = gmtime(&t1);
    struct tm tmt1;
    memcpy(&tmt1, temp, sizeof(tm));

    temp = gmtime(&t2);
    struct tm tmt2;
    memcpy(&tmt2, temp, sizeof(tm));

    cout << tmt1.tm_sec << endl;
    cout << tmt2.tm_sec << endl;