Tôi đang tìm cách tiết kiệm thời gian trong HH :: MM :: SS fashion in C++. Tôi thấy ở đây rằng họ có nhiều giải pháp và sau một ít nghiên cứu tôi đã chọn cho time
và localtime
. Tuy nhiên, nó có vẻ như các localtime
chức năng là một chút khó khăn, vì nó says:C++: làm thế nào để có được thời gian thực tế với thời gian và giờ địa phương?
Tất cả các cuộc gọi đến và localtime gmtime sử dụng cấu trúc tĩnh cùng, vì vậy mỗi cuộc gọi ghi đè các kết quả của các cuộc gọi trước đó.
Vấn đề mà điều này gây ra được trình bày trong đoạn mã tiếp theo:
#include <ctime>
#include <iostream>
using namespace std;
int main() {
time_t t1 = time(0); // get time now
struct tm * now = localtime(& t1);
std::cout << t1 << std::endl;
sleep(2);
time_t t2 = time(0); // get time now
struct tm * now2 = localtime(& t2);
std::cout << t2 << std::endl;
cout << (now->tm_year + 1900) << '-'
<< (now->tm_mon + 1) << '-'
<< now->tm_mday << ", "
<< now->tm_hour << ":" << now->tm_min << ":" << now->tm_sec
<< endl;
cout << (now2->tm_year + 1900) << '-'
<< (now2->tm_mon + 1) << '-'
<< now2->tm_mday << ", "
<< now2->tm_hour << ":" << now2->tm_min << ":" << now2->tm_sec
<< endl;
}
Một sản lượng điển hình cho điều này là:
1320655946
1320655948
2011-11-7, 9:52:28
2011-11-7, 9:52:28
Như bạn có thể thấy, time_t
timestamps là đúng, nhưng giờ địa phương làm mọi thứ lộn xộn.
Câu hỏi của tôi là: làm cách nào để chuyển đổi một loại dấu thời gian ot time_t
thành thời gian có thể đọc được?
+1. Tôi thậm chí không biết về * _r! Cảm ơn! – Viet