Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การเปรียบเทียบวันที่ (Comparing Dates) ใน C#

ใน C# สามารถเปรียบเทียบ DateTime ได้โดยตรงด้วยตัวดำเนินการเปรียบเทียบ (<, >, <=, >=, ==, !=) เพราะ DateTime Implement IComparable และ Overload Operators ไว้แล้ว

ตัวอย่างการเปรียบเทียบ

using System;

namespace Program
{
    class Demo
    {
        static void Main()
        {
            DateTime date1 = new DateTime(2024, 7, 20);
            DateTime date2 = new DateTime(2024, 7, 25);
            
            Console.WriteLine($"Date 1: {date1:d}");
            Console.WriteLine($"Date 2: {date2:d}");
            
            if (date1 < date2)
                Console.WriteLine($"{date1:d} มาก่อน {date2:d}");
            else if (date1 > date2)
                Console.WriteLine($"{date1:d} หลัง {date2:d}");
            else
                Console.WriteLine("วันที่เท่ากัน");
            
            // ใช้ CompareTo
            int cmp = date1.CompareTo(date2);
            Console.WriteLine($"CompareTo result: {cmp}"); // -1 (น้อยกว่า)
        }
    }
}

ผลลัพธ์

Date 1: 7/20/2024
Date 2: 7/25/2024
7/20/2024 มาก่อน 7/25/2024
CompareTo result: -1

เมธอดเปรียบเทียบเพิ่มเติม

  • DateTime.Compare(dt1, dt2) - Static method ส่งคืน -1, 0, 1
  • dt1.CompareTo(dt2) - Instance method ส่งคืน -1, 0, 1
  • dt1 == dt2 - Operator Overload

DateTime vs DateTimeOffset

สำหรับการเปรียบเทียบข้าม Time Zone ควรใช้ DateTimeOffset ซึ่งเก็บ Offset ไว้ด้วย:

DateTimeOffset dto1 = new DateTimeOffset(2024, 7, 20, 10, 0, 0, TimeSpan.Zero);
DateTimeOffset dto2 = new DateTimeOffset(2024, 7, 20, 15, 0, 0, TimeSpan.FromHours(5));
// dto1 และ dto2 คือเวลาเดียวกัน (ต่าง Time Zone) Compare จะได้ 0

หมายเหตุ: DateTime.Kind (Local, Utc, Unspecified) ส่งผลต่อการเปรียบเทียบ ควรใช้ Utc หรือ DateTimeOffset เพื่อความชัดเจน