如何将系统时间附加到字符串变量

时间:2016-08-11 15:22:36

标签: c++ string ctime

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

int main()
{
    string NowTime;
    time_t now;

    struct tm nowLocal;

    now=time(NULL); // get the time from the OS

    nowLocal=*localtime(&now);

    NowTime = nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;
    cout<< NowTime;
}

当我运行程序时,它什么也没显示,有人可以帮助我吗?我是编程方面的新手。

6 个答案:

答案 0 :(得分:1)

如果您尝试

cout << nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;

你会看到一个整数,而不是一个类似时间的东西 这是因为它是五个整数的总和 - 将字符提升为整数,然后将它们全部加起来。

最简单的解决方法是根本不构建字符串,而是单独输出部分:

cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;

否则,您需要将这些数字转换为字符串:

NowTime = std::to_string(nowLocal.tm_hour) + ':' + std::to_string(nowLocal.tm_min) + ':' + std::to_string(nowLocal.tm_sec);

或者,您可以使用std::ostringstream,其工作方式与std::cout和其他流一样,但写入std::string

std::ostringstream ss;
ss << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;
NowTime = ss.str();

答案 1 :(得分:0)

该行:

NowTime = nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;

将小时,分钟和秒添加到冒号符号的数值,因为char被隐式强制转换为int。然后,该值将被解释为字符串赋值运算符中的char。

相反,您可以直接将值输出到cout。它们将由cout的流插入运算符<<正确格式化。

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

int main()
{
    string NowTime;
    time_t now;

    tm nowLocal;

    now=time(NULL); // get the time from the OS

    nowLocal=*localtime(&now);

    cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;

    return 0;
}

如果您想将它们存储在字符串中,请阅读stringstreams。它们具有与cout类似的语法,可以使格式化字符串更容易。

答案 2 :(得分:0)

不必将结果放在变量中,您可以像这样输出:

cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;

Live Example

另外,如果要保留变量,请执行以下操作:

NowTime = std::to_string(nowLocal.tm_hour) + ':' + std::to_string(nowLocal.tm_min) + ':' + std::to_string(nowLocal.tm_sec);
cout << NowTime;

答案 3 :(得分:0)

试试这个:

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

int main()
{
string NowTime;
time_t now;

struct tm nowLocal;

now=time(NULL); // get the time from the OS

nowLocal=*localtime(&now);

stringstream s;
s<<nowLocal.tm_hour;
s<<":";
s<<nowLocal.tm_min;
s<<":";
s<<nowLocal.tm_sec;
NowTime = s.str();
cout<< NowTime;
}

你不能直接从int转换为字符串,你需要将值放入流然后转换为字符串。

答案 4 :(得分:0)

使用iostringstream构建你想要的字符串怎么样?

#include<iostream>
#include<ctime>
#include<string>
#include <sstream>

using namespace std;

int main()
{
    ostringstream NowTime;
    time_t now;

    struct tm nowLocal;

    now=time(NULL); // get the time from the OS

    nowLocal=*localtime(&now);

    NowTime << nowLocal.tm_hour << ":" << nowLocal.tm_min << ":" << nowLocal.tm_sec;
    cout<< NowTime.str() << endl;
}

或者就你的程序而言,你可以简单地使用std :: cout,它也恰好是一个输出流。

cout << nowLocal.tm_hour << ":" << nowLocal.tm_min << ":" << nowLocal.tm_sec << endl;

答案 5 :(得分:0)

因为您看起来像是预先c ++ 11并且无法使用std::to_string。这是一种类似C的方式,坚持使用您当前正在使用的包含。

#include<iostream>
#include<ctime>
#include<string>

using namespace std;

#define STR_LEN 128

int main()
{
    string nowTime;

    time_t now;

    struct tm nowLocal;

    now = time( NULL ); // get the time from the OS

    nowLocal = *localtime( &now );

    char hour[ STR_LEN ], min[ STR_LEN ], sec[ STR_LEN ];

    sprintf( hour, "%d", nowLocal.tm_hour );

    sprintf( min, "%d", nowLocal.tm_min );

    sprintf( sec, "%d", nowLocal.tm_sec );

    nowTime = string( hour ) + ':' + string( min ) + ':' + string( sec );

    cout << nowTime << endl;
}