CÁC HÀM C / C++
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Hàm mktime() trong C

Trong bài này, mình sẽ tập trung vào hàm mktime(), một trong những hàm quan trọng nhất trong thư viện time.h. Hàm mktime() trong C được sử dụng để chuyển đổi các thông tin về thời gian trong cấu trúc struct tm thành số giây tính từ Epoch (thời điểm bắt đầu của hệ thống Unix). Mình sẽ tìm hiểu về cú pháp, cách sử dụng và các ví dụ minh họa để hiểu rõ hơn về hàm này và cách nó hoạt động.

Hàm mktime() trong C

Cú pháp tổng quát của hàm mktime()

time_t mktime(struct tm *timeptr);

Các tham số đầu vào của hàm mktime()

  • timeptr: Con trỏ đến một cấu trúc struct tm chứa thông tin về thời gian.

Giá trị trả về của hàm mktime()

  • Hàm trả về số giây tính từ Epoch cho thời điểm được đại diện bởi cấu trúc struct tm. Trong trường hợp không thể chuyển đổi, giá trị trả về là -1.

Ví dụ:

#include <stdio.h>
#include <time.h>

int main() {
    struct tm timeinfo = {0};
    timeinfo.tm_year = 2023 - 1900; // Năm 2023
    timeinfo.tm_mon = 3 - 1;        // Tháng 3 (index từ 0)
    timeinfo.tm_mday = 20;          // Ngày 20
//Bài viết này được đăng tại freetuts.net
    time_t seconds = mktime(&timeinfo);
    if (seconds != -1) {
        printf("Số giây tính từ Epoch cho ngày 20/03/2023: %ld\n", seconds);
    } else {
        printf("Không thể chuyển đổi thời gian.\n");
    }

    return 0;
}

Output:

Số giây tính từ Epoch cho ngày 20/03/2023: 1679654400

Trong ví dụ này, mình sử dụng hàm mktime() để chuyển đổi thông tin về thời gian được lưu trữ trong cấu trúc struct tm thành số giây tính từ Epoch. Sau đó,mình in ra số giây tính được để kiểm tra kết quả.

Cách sử dụng hàm mktime() trong C

Sử dụng hàm mktime() để chuyển đổi struct tm thành giây tính từ Epoch

#include <stdio.h>
#include <time.h>
//Bài viết này được đăng tại freetuts.net
int main() {
    // Tạo một cấu trúc struct tm chứa thông tin về thời gian
    struct tm timeinfo = {0};
    timeinfo.tm_year = 2023 - 1900; // Năm 2023
    timeinfo.tm_mon = 3 - 1;        // Tháng 3 (index từ 0)
    timeinfo.tm_mday = 20;          // Ngày 20

    // Chuyển đổi cấu trúc struct tm thành giây tính từ Epoch
    time_t seconds = mktime(&timeinfo);
//Bài viết này được đăng tại freetuts.net
    // In ra số giây tính được
    printf("Số giây tính từ Epoch cho ngày 20/03/2023: %ld\n", seconds);

    return 0;
}

Áp dụng hàm mktime() để tạo ra thời gian hiện tại

#include <stdio.h>
#include <time.h>

int main() {
    // Khai báo biến time_t để lưu giá trị thời gian hiện tại
    time_t current_time;
//Bài viết này được đăng tại freetuts.net
    // Sử dụng hàm time() để lấy thời gian hiện tại
    current_time = time(NULL);
//Bài viết này được đăng tại freetuts.net
    // In ra thời gian hiện tại dưới dạng số giây tính từ Epoch
    printf("Thời gian hiện tại tính từ Epoch: %ld\n", current_time);

    return 0;
}

Output:

Số giây tính từ Epoch cho ngày 20/03/2023: 1679654400
Thời gian hiện tại tính từ Epoch: 1694381131

Trong ví dụ trên:

  • Ở phần A, mình tạo một cấu trúc struct tm chứa thông tin về thời gian và sử dụng hàm mktime() để chuyển đổi cấu trúc này thành số giây tính từ Epoch.
  • Ở phần B, mình sử dụng hàm time() để lấy thời gian hiện tại dưới dạng số giây tính từ Epoch.

Ví dụ về sử dụng các hàm mktime() trong C

Sử dụng hàm mktime() để tính toán khoảng thời gian giữa hai ngày

#include <stdio.h>
#include <time.h>
//Bài viết này được đăng tại freetuts.net
int main() {
    // Tạo cấu trúc tm cho ngày bắt đầu
    struct tm start_time = {0};
    start_time.tm_year = 2023 - 1900; // Năm 2023
    start_time.tm_mon = 3 - 1;        // Tháng 3 (index từ 0)
    start_time.tm_mday = 20;          // Ngày 20

    // Chuyển đổi ngày bắt đầu thành giây từ Epoch
    time_t start_seconds = mktime(&start_time);

    // Tạo cấu trúc tm cho ngày kết thúc
    struct tm end_time = {0};
    end_time.tm_year = 2023 - 1900; // Năm 2023
    end_time.tm_mon = 4 - 1;        // Tháng 4 (index từ 0)
    end_time.tm_mday = 15;          // Ngày 15
//Bài viết này được đăng tại freetuts.net
    // Chuyển đổi ngày kết thúc thành giây từ Epoch
    time_t end_seconds = mktime(&end_time);

    // Tính khoảng thời gian giữa hai ngày
    double diff_seconds = difftime(end_seconds, start_seconds);
    
    // In ra kết quả
    printf("Khoảng thời gian giữa ngày 20/03/2023 và ngày 15/04/2023: %.0f giây\n", diff_seconds);

    return 0;
}

Áp dụng hàm mktime() để hiển thị thời gian cục bộ

#include <stdio.h>
#include <time.h>

int main() {
    // Lấy thời gian hiện tại dưới dạng số giây tính từ Epoch
    time_t current_time = time(NULL);

    // Chuyển đổi thời gian hiện tại thành cấu trúc tm địa phương
    struct tm *local_time = localtime(&current_time);
//Bài viết này được đăng tại freetuts.net
    // In ra thời gian cục bộ
    printf("Thời gian cục bộ hiện tại: %s\n", asctime(local_time));

    return 0;
}

Output:

Khoảng thời gian giữa ngày 20/03/2023 và ngày 15/04/2023: 2419200 giây
Thời gian cục bộ hiện tại: Wed Sep  7 14:38:46 2022

Trong ví dụ này:

  • Ở phần A, mình sử dụng hàm mktime() để chuyển đổi các thông tin thời gian của hai ngày thành số giây tính từ Epoch, sau đó sử dụng hàm difftime() để tính khoảng thời gian giữa chúng.
  • Ở phần B, mình sử dụng hàm mktime() để chuyển đổi thời gian hiện tại thành thời gian cục bộ và in ra màn hình.

Kết bài

Trong bài này, mình đã tìm hiểu về một trong những hàm quan trọng nhất trong thư viện time.h, đó là hàm mktime(). Mình đã biết cách sử dụng hàm này để chuyển đổi thông tin thời gian từ cấu trúc struct tm sang số giây tính từ Epoch, và cách áp dụng nó trong các tình huống thực tế như tính toán khoảng thời gian giữa hai ngày và hiển thị thời gian cục bộ.

Hy vọng rằng bài này đã cung cấp cho bạn cái nhìn tổng quan về cách sử dụng hàm mktime() và các hàm xử lý thời gian khác trong C.

test php

Bài giải

-------------------- ######## --------------------

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý chuỗi (string.h) trong C/C++

Các hàm xử lý chuỗi (string.h) trong C/C++

Thread Pools và Parallel Algorithms trong C++

Thread Pools và Parallel Algorithms trong C++

Tạo và quản lý các Multithreading trong C++

Tạo và quản lý các Multithreading trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Try, Catch, và Throw của Exception Handling trong C++

Try, Catch, và Throw của Exception Handling trong C++

Cách sử dụng Lambda Expressions trong C++

Cách sử dụng Lambda Expressions trong C++

Sử dụng weak_ptr trong C++

Sử dụng weak_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng unique_ptr trong C++

Sử dụng unique_ptr trong C++

Tổng quan về Smart Pointers trong C++

Tổng quan về Smart Pointers trong C++

Sử dụng Iterators trong STL của C++

Sử dụng Iterators trong STL của C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng trong List trong C++

[Iterator] Sử dụng trong List trong C++

[STL] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

Tổng quan về Iterators trong C++

Tổng quan về Iterators trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

Top