เปรียบเทียบสองวันที่

C:
เปรียบเทียบสองวันที่

วิธีการ:

ภาษา C ไม่มีประเภทที่สร้างมาเพื่อเก็บวันที่โดยเฉพาะ จึงจำเป็นต้องใช้ไลบรารี time.h เพื่อทำงานกับโครงสร้างวันที่และเวลา โครงสร้าง tm และฟังก์ชัน difftime() มักถูกใช้ในการเปรียบเทียบวันที่ ด้านล่างเป็นตัวอย่างที่แสดงวิธีการเปรียบเทียบวันที่สองวัน:

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

int main() {
    struct tm date1 = {0};
    struct tm date2 = {0};
    double seconds;

    // วันที่แรก (ปี, เดือน, วัน)
    date1.tm_year = 2023 - 1900; // ปีนับตั้งแต่ 1900
    date1.tm_mon = 3 - 1;        // เดือน [0-11]
    date1.tm_mday = 15;          // วันของเดือน [1-31]

    // วันที่สอง (ปี, เดือน, วัน)
    date2.tm_year = 2023 - 1900;
    date2.tm_mon = 4 - 1;
    date2.tm_mday = 14;

    // แปลงเป็นรูปแบบ time_t
    time_t time1 = mktime(&date1);
    time_t time2 = mktime(&date2);

    // เปรียบเทียบ
    seconds = difftime(time1, time2);

    if (seconds == 0) {
        printf("วันที่เหมือนกัน\n");
    } else if (seconds > 0) {
        printf("วันที่แรกมาหลังจากวันที่สอง\n");
    } else {
        printf("วันที่แรกมาก่อนวันที่สอง\n");
    }

    return 0;
}

ผลลัพธ์ที่อาจได้รับ:

วันที่แรกมาก่อนวันที่สอง

โปรแกรมนี้เริ่มต้นโดยตั้งค่าโครงสร้าง tm สองตัวด้วยวันที่ที่เฉพาะเจาะจง แปลงเป็นรูปแบบ time_t โดยใช้ mktime(), และสุดท้ายเปรียบเทียบกันโดยใช้ difftime(), ซึ่งคืนค่าความแตกต่างเป็นวินาที (เป็น double) ระหว่างสองเวลา

ศึกษาเพิ่มเติม

ในช่วงแรกๆ ของภาษา C, การดำเนินการเกี่ยวกับวันที่และเวลาต้องทำการคำนวณด้วยตนเอง บ่อยครั้งที่ต้องคำนึงถึงปีอธิกสุรทิน, จำนวนวันที่แตกต่างกันของเดือน, และแม้กระทั่งวินาทีอธิกสุรทิน การนำเสนอ time.h ในมาตรฐาน ANSI C ทำให้มีการมาตรฐานในการจัดการเวลาในภาษา C, ทำให้การดำเนินการเกี่ยวกับวันที่และเวลาเป็นเรื่องง่ายขึ้น

การใช้ time.h สำหรับการเปรียบเทียบวันที่ค่อนข้างตรงไปตรงมาแต่มีข้อจำกัด โครงสร้าง tm ไม่ได้คำนึงถึงเขตเวลาหรือการประหยัดแสงตามฤดูกาล, และ difftime() มีเพียงให้ความแตกต่างในวินาทีเท่านั้น, ไม่สามารถให้ความละเอียดลึกลงไปได้ในบางแอปพลิเคชัน

สำหรับแอปพลิเคชันที่ต้องการการดำเนินการวัน-เวลาที่มั่นคงยิ่งขึ้น รวมถึงการรองรับเขตเวลา, การเปลี่ยนแปลงตามฤดูกาล, และช่วงเวลาที่แม่นยำยิ่งขึ้น, ไลบรารีเช่น date.h (ไลบรารีวันที่ของ Howard Hinnant, ไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐาน) นำเสนอทางเลือกสมัยใหม่แก่ time.h ไลบรารีเหล่านี้มอบเครื่องมือที่ครอบคลุมยิ่งขึ้นสำหรับการจัดการวัน-เวลาในภาษา C++, ได้รับประโยชน์จากการพัฒนาของภาษาโปรแกรมมิ่งเป็นเวลาหลายทศวรรษ สำหรับโปรแกรมเมอร์ภาษา C, การใช้ไลบรารีภายนอกเหล่านี้หรือการจัดการความซับซ้อนของการคำนวณวัน-เวลาโดยตรงยังคงเป็นสิ่งจำเป็นเพื่อการจัดการวัน-เวลาที่แม่นยำและตระหนักถึงวั Culturally aware date-time manipulation.