如何将ctime lib中的day与day字符串进行比较?

时间:2018-10-14 09:49:33

标签: c++ time

有人知道如何将日期与日期字符串进行比较吗。听起来似乎很混乱,但是我想到了这一点。希望代码能清除所有内容

#include <iostream>
#include <ctime>
    int main()
    {
        /// current date/time based on current system
        time_t now = time(0);

        /// convert now to string form
       tm *ltm = localtime(&now);


        cout << "The local date and time is: " << ltm << endl;

        if(*ltm == "Mon") Monday();
        else if(*ltm == "Tue") Tuesday();
        else if(*ltm == "Wed") Wednesday();
        else if(*ltm == "Thu") Thursday();
        else if(*ltm == "Fri") Friday();
        else if(*ltm == "Sat" || *ltm == "Sun") Monday();




        return 0;
    }

那是巨大的错误消息板之一,我只给出那一行,因为其余错误相同,只是针对不同的行。

/home/shadowdragon/Documents/uktc_schdule/UKTC_schedule/main.cpp|90|error: no match for ‘operator==’ (operand types are ‘tm’ and ‘const char [4]’)|

1 个答案:

答案 0 :(得分:0)

  

您甚至不需要将其与字符串进行比较(即const char*)... <ctime>提供了自己的比较所有内容的方法...

首先,创建一个枚举器,以跟踪一周中的所有天(0-6),

enum
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

现在像这样检查它:

if (*ltm.tm_wday == Sunday)
    std::cout << "Its Sunday!" << std::endl;

其他日子也要这么做...

仔细观察,您会发现结构成员 tm_wday 返回的数字介于 0-6 Sunday 至< em> Monday )和 enumerator只是为了澄清它 ...(这样您就不会与if (*ltm.tm_wday == 0 /*Sunday*/)或类似的东西混淆了……)< / p>

详细了解 tm 结构here ...

甚至还有C ++的替代方案here ...

注意:std::tm为您提供准确的UTC时间,因此建议将其检出,并使用this function代替指出的localtime()在评论部分...


编辑:如果您已经将其与字符串进行比较...那么也许某个函数可以提供帮助...

const char * GetDay(struct tm * tm)
{
    switch (tm->tm_wday)
    {
        case 0:
            return "Sun";
        case 1:
            return "Mon";
        case 2:
            return "Tue";
        case 3:
            return "Wed";
        case 4:
            return "Thu";
        case 5:
            return "Fri";
        case 6:
            return "Sat";
        default: return "";
    }
}

然后执行以下操作:

if (GetDay(ltm) == "Sun")
    std::cout << "Its Sunday again!" << std::endl;

亲切的问候,

Ruks。