01/10/2018, 14:53

Time_t và time(0) trong C++

Chào mọi người, em đang học về cách sinh số ngẫu nhiên.

Cho em hỏi về sự khác nhau giữa time_t và time(0) ạ. Em nghĩ time_t là đo thời gian khi lập trình, còn time(0) là tính từ năm 1970.

Nếu đúng như vậy thì em không hiểu time_t lấy mốc đầu tiên là khi nào, khi mình tạo project hay khi mình chạy chương trình.

Em xin cảm ơn

viết 17:04 ngày 01/10/2018

time_t là kiểu dữ liệu, ko phải để đo đạc cái gì hết. Chữ _t nghĩa là “type”. time_t viết tắt cho time_type là kiểu dữ liệu “thời gian”.

biến kiểu time_t có giá trị là số giây tính từ epoch (1970-01-01 00:00:00 UTC)

time(0) là hàm trong thư viện ctime, nhận vào 1 con trỏ, thực hiện lưu giá trị x là số giây tính từ epoch vào nơi mà con trỏ đó trỏ tới, và trả về x. Nếu con trỏ đó là NULL thì chỉ trả về x.

và cuối cùng là time_t là của nợ C++ gánh từ C qua, C++ có thư viện chrono hại điện hơn

C++11 chrono tuy dài dòng nhưng rõ ràng hơn:

#include <iostream>
#include <chrono>

int main()
{
    std::chrono::seconds secondsSinceEpoch =
        std::chrono::duration_cast<std::chrono::seconds>(
            std::chrono::system_clock::now().time_since_epoch());
    std::cout << secondsSinceEpoch.count();
}
  • std::chrono::system_clock là cái đồng hồ đo thời gian
  • gọi std::chrono::system_clock::now() nghĩa là lấy thời gian hiện tại của cái system_clock này, kiểu dữ liệu của nó là time_point là mốc thời gian
  • gọi tiếp .time_since_epoch() nghĩa là lấy mốc thời gian hiện tại trừ cho mốc thời gian tại epoch. Kết quả trả về là 1 khoảng thời gian duration
  • duration có thể chứa số giây, số mili giây, micro giây, hay nano giây. Muốn lấy số giây thì phải ép kiểu về kiểu seconds. Vì ở đây có bỏ qua số micro/nano giây nên phải ép kiểu tường minh bằng duration_cast,
  • cuối cùng lấy giá trị số của seconds ra thông qua .count()
Bài liên quan
0