如何在没有参数的情况下显示时间戳中的时间并显示当前时间?
How to show time from a time stamp and show current time when I have no argument?
我需要制作一个函数,它接受时间戳(以毫秒为单位的时间,输入 long
)并将其转换为可读时间(Y-M-D H:M:S);但是,在那之后,我必须重载函数,这样如果函数没有获得参数,它将 return 当前日期。
我知道如何让函数从给定的长参数转换为可读时间,但我不知道如何重载函数。
#include <iostream>
#include <cstdio>
#include <ctime>
#include <string>
using namespace std;
string timeToString(long timestamp)
{
const time_t rawtime = (const time_t)timestamp;
struct tm * dt;
char timestr[30];
char buffer [30];
dt = localtime(&rawtime);
strftime(timestr, sizeof(timestr), "%Y-%m-%d %X", dt);
sprintf(buffer,"%s", timestr);
string stdBuffer(buffer);
return stdBuffer;
}
int main()
{
cout << timeToString(1538123990) << "\n";
}
首先(如评论中所述)您应该真正使用现代 C++ 库的 std::chrono
函数进行时间操作。但是,坚持您拥有的基本代码,您可以只为 timeToString
函数的参数提供一个 default 值;这应该是一个真正意义上没有意义的值,并且你永远不会 actually 通过。我在下面的示例中选择了 -1
,因为您不太可能使用负时间戳。
如果使用参数调用函数,则使用该值;否则,将使用给定的默认值调用该函数。然后我们可以调整代码来检查该值,如下所示:
#include <iostream>
#include <ctime>
#include <string>
std::string timeToString(long timestamp = -1)
{
time_t rawtime; // We cannot (now) have this as "const"
if (timestamp < 0) rawtime = time(nullptr); // Default parameter:- get current time
else rawtime = static_cast<time_t>(timestamp); // Otherwise convert the given argument
struct tm* dt = localtime(&rawtime);
char timestr[30];
// char buffer[30]; // Redundant (see below)
strftime(timestr, sizeof(timestr), "%Y-%m-%d %X", dt);
// sprintf(buffer, "%s", timestr); // This just makes a copy of the same string!
return std::string(timestr);
}
int main()
{
std::cout << timeToString(1538123990) << "\n";
std::cout << timeToString() << "\n"; // No parameter - function will get "-1" instead!
return 0;
}
我需要制作一个函数,它接受时间戳(以毫秒为单位的时间,输入 long
)并将其转换为可读时间(Y-M-D H:M:S);但是,在那之后,我必须重载函数,这样如果函数没有获得参数,它将 return 当前日期。
我知道如何让函数从给定的长参数转换为可读时间,但我不知道如何重载函数。
#include <iostream>
#include <cstdio>
#include <ctime>
#include <string>
using namespace std;
string timeToString(long timestamp)
{
const time_t rawtime = (const time_t)timestamp;
struct tm * dt;
char timestr[30];
char buffer [30];
dt = localtime(&rawtime);
strftime(timestr, sizeof(timestr), "%Y-%m-%d %X", dt);
sprintf(buffer,"%s", timestr);
string stdBuffer(buffer);
return stdBuffer;
}
int main()
{
cout << timeToString(1538123990) << "\n";
}
首先(如评论中所述)您应该真正使用现代 C++ 库的 std::chrono
函数进行时间操作。但是,坚持您拥有的基本代码,您可以只为 timeToString
函数的参数提供一个 default 值;这应该是一个真正意义上没有意义的值,并且你永远不会 actually 通过。我在下面的示例中选择了 -1
,因为您不太可能使用负时间戳。
如果使用参数调用函数,则使用该值;否则,将使用给定的默认值调用该函数。然后我们可以调整代码来检查该值,如下所示:
#include <iostream>
#include <ctime>
#include <string>
std::string timeToString(long timestamp = -1)
{
time_t rawtime; // We cannot (now) have this as "const"
if (timestamp < 0) rawtime = time(nullptr); // Default parameter:- get current time
else rawtime = static_cast<time_t>(timestamp); // Otherwise convert the given argument
struct tm* dt = localtime(&rawtime);
char timestr[30];
// char buffer[30]; // Redundant (see below)
strftime(timestr, sizeof(timestr), "%Y-%m-%d %X", dt);
// sprintf(buffer, "%s", timestr); // This just makes a copy of the same string!
return std::string(timestr);
}
int main()
{
std::cout << timeToString(1538123990) << "\n";
std::cout << timeToString() << "\n"; // No parameter - function will get "-1" instead!
return 0;
}