C++ 当前时间 -> 两位数
C++ current time -> two digits
我通过
显示当前date/time
#include <ctime>
time_t sec = time(NULL);
tm* curTime = localtime(&sec);
cout << "Date: " << curTime->tm_mday << "." << curTime->tm_mon << "." << curTime->tm_year+1900 << endl;
cout << "Time: " << curTime->tm_hour << ":" << curTime->tm_min << ":" << curTime->tm_sec << endl;
实际上它显示例如
Date: 4.10.2016
Time: 9:54:0
我在这里遇到了 2 个问题:
- 我想要两个数字,日期(日和月)和时间(小时、分钟和秒)。所以它应该显示 04.10.2016 和 09:54:00
- 今天显示的是 24.10.2016 但今天是 24.11.2016。为什么它显示十月而不是十一月? Linux-时钟正确显示时间。
感谢您的帮助:)
您应该使用机械手进行打印。
在 printf("%02d", curTime->tm_hour)
在 cout 中,你可以使用,
std::cout << std::setw(2) << std::setfill('0') << curTime->tm_hour.
tm_mon 是从 0 到 11。所以你应该使用 tm_mon+1 打印。
对于您的格式,请尝试 std::strftime
- 有几种方法。
如果您使用 C++11 并且您的编译器实现了 iomanip header 中的 std::put_time()(尽管不幸的是这不是您的情况):
std::cout << "Date: " << std::put_time(curTime, "%d.%m.%Y") << std::endl;
std::cout << "Time: " << std::put_time(curTime, "%H:%M:%S") << std::endl;
如果您使用较旧的编译器版本(您的情况):
std::string to_string(const char* format, tm* time) {
std::vector<char> buf(100, '[=11=]');
buf.resize(std::strftime(buf.data(), buf.size(), format, time));
return std::string(buf.begin(), buf.end());
}
std::cout << "Date: " << to_string("%d.%m.%Y", curTime) << std::endl;
std::cout << "Time: " << to_string("%H.%M.%S", curTime) << std::endl;
- 如 user7777777 所述,tm_mon = 0..11.
我通过
显示当前date/time#include <ctime>
time_t sec = time(NULL);
tm* curTime = localtime(&sec);
cout << "Date: " << curTime->tm_mday << "." << curTime->tm_mon << "." << curTime->tm_year+1900 << endl;
cout << "Time: " << curTime->tm_hour << ":" << curTime->tm_min << ":" << curTime->tm_sec << endl;
实际上它显示例如
Date: 4.10.2016
Time: 9:54:0
我在这里遇到了 2 个问题:
- 我想要两个数字,日期(日和月)和时间(小时、分钟和秒)。所以它应该显示 04.10.2016 和 09:54:00
- 今天显示的是 24.10.2016 但今天是 24.11.2016。为什么它显示十月而不是十一月? Linux-时钟正确显示时间。
感谢您的帮助:)
您应该使用机械手进行打印。 在 printf("%02d", curTime->tm_hour) 在 cout 中,你可以使用, std::cout << std::setw(2) << std::setfill('0') << curTime->tm_hour.
tm_mon 是从 0 到 11。所以你应该使用 tm_mon+1 打印。
对于您的格式,请尝试 std::strftime
- 有几种方法。
如果您使用 C++11 并且您的编译器实现了 iomanip header 中的 std::put_time()(尽管不幸的是这不是您的情况):
std::cout << "Date: " << std::put_time(curTime, "%d.%m.%Y") << std::endl;
std::cout << "Time: " << std::put_time(curTime, "%H:%M:%S") << std::endl;
如果您使用较旧的编译器版本(您的情况):
std::string to_string(const char* format, tm* time) {
std::vector<char> buf(100, '[=11=]');
buf.resize(std::strftime(buf.data(), buf.size(), format, time));
return std::string(buf.begin(), buf.end());
}
std::cout << "Date: " << to_string("%d.%m.%Y", curTime) << std::endl;
std::cout << "Time: " << to_string("%H.%M.%S", curTime) << std::endl;
- 如 user7777777 所述,tm_mon = 0..11.