【问题标题】:i need it to add one hour to HH:MM:SS but it becomes AM when it is supposed to be PM我需要它为 HH:MM:SS 添加一小时,但是当它应该是 PM 时它变成 AM
【发布时间】:2021-01-23 20:31:54
【问题描述】:

当我在 if 语句中按 1 时显示在 main() 中时,我需要代码方面的帮助。当它应该是 PM 时,它是 AM。我相信它正在从我的 GET12Hour 和 Get24hour 函数中挂断,因为当我将呼叫切换到我的函数时,它工作得很好,但两者都不会输出 24 小时制而不是 12 小时制。我该如何解决。这是我在 C++ 中的第一个项目。请帮忙。

#include <iostream>
#include<ctime>
using namespace std;

void Get24Hour(){
    time_t now = time(0);
    tm* lt = localtime(&now);

    cout << lt->tm_hour << ":";
    cout << lt->tm_min << ":";
    cout << lt->tm_sec;
    return;

}

void Get12Hour(){
    time_t now = time(0);
    tm* lt = localtime(&now);
    string amOrPm;

    if(lt->tm_hour > 12){
        lt->tm_hour = lt->tm_hour - 12;
        amOrPm = "PM";
        cout << lt->tm_hour << ":";
    }
    else{
        cout << lt->tm_hour << ":";
        amOrPm = "AM";
    }
    cout << lt->tm_min << ":";
    cout << lt->tm_sec << " ";
    cout << amOrPm;
    return;
}
void DisplayMenu(){
    cout << "1- Add One Hour" << endl;
    cout << "2- Add One Minute" << endl;
    cout << "3- Add One Second" << endl;
    cout << "4- Exit Program" << endl;
}

int main()
{

    time_t now = time(0);
    tm* lt = localtime(&now);
    string amOrPm;
    int userInput;

    cout << "24 hour clock" << endl;
    Get24Hour();
    cout << endl;

    cout << "12 hour clock" << endl;
    Get12Hour();
    cout << endl;

    DisplayMenu();


    cin >> userInput;
    if(userInput == 1){
        lt->tm_hour = lt->tm_hour + 1;
        cout << "24 hour clock" << endl;
        cout << lt->tm_hour << ":" << lt->tm_min << ":" << lt->tm_sec <<endl;

        cout << "12 hour clock" << endl;
        if(lt->tm_hour > 12){
            lt->tm_hour = lt->tm_hour - 12;
            amOrPm = "PM";
            cout << lt->tm_hour << ":";
        }
        else{
            cout << lt->tm_hour << ":";
            amOrPm = "AM";
        }
        cout << lt->tm_min << ":";
        cout << lt->tm_sec << " ";
        cout << amOrPm;
    }
    else if(userInput == 2){

    }
    else if (userInput == 3){

    }
    else if(userInput == 4){

    }
    return 0;
}

【问题讨论】:

  • 您有逻辑错误和输出格式错误。请考虑改用strftime 函数。它默认提供 AM/PM 名称。

标签: c++ if-statement time


【解决方案1】:

localtime 的 cppreference.com 文档说它返回一个

成功时指向静态内部std::tm 对象,否则为空指针。该结构可以在std::gmtimestd::localtimestd::ctime 之间共享,并且可以在每次调用时被覆盖。

“静态”表示每次都是同一个std::tm 对象。您所有的 lt 指针都指向同一个结构。每次调用 localtime 时,都会更改该单个对象的内容以匹配该调用的输入。

所以你的程序,按顺序:

  1. 获取main中的lt指针,并将tm对象设置为当前时间。
  2. 获取并打印Get24Hour 中的当地时间。
  3. Get12Hour 中调用localtime。那么如果当地时间是下午,它改变std::tm对象,从tm_hour中减去12。
  4. 使用main 中的lt 指针打印该时间。由于此 lt 指向刚刚更改的同一对象,因此此代码看到 tm_hour 的值小于 12。

要解决此问题,请确保对 localtime 的每次调用都靠近您使用它的位置,而不是在其他函数之间也可能调用 localtimegmtimectime

【讨论】:

  • 我该怎么做。我对如何做到这一点很迷茫。除了我的 12 小时制和 24 小时制之外,我是否需要将它们从每个附加功能中删除。如何使我的加时功能的时间等于我的 12 和 24 小时制加上一小时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 2011-06-01
相关资源
最近更新 更多