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

การคำนวณความต่างระหว่างสองวันที่ใน C# ด้วย DateTime.Subtract()

เมธอด DateTime.Subtract() ใช้คำนวณความต่างระหว่างสองวันที่ คืนค่าเป็น TimeSpan ซึ่งแสดงช่วงเวลา (Duration) ระหว่างสองจุดเวลา

รูปแบบการใช้งาน

DateTime date1 = new DateTime(2024, 1, 1);
DateTime date2 = new DateTime(2024, 12, 31);
TimeSpan difference = date2.Subtract(date1);

โค้ดตัวอย่างสมบูรณ์

using System;

public class Demo
{
    public static void Main()
    {
        DateTime date1 = new DateTime(2024, 1, 1);
        DateTime date2 = new DateTime(2024, 12, 31);
        
        Console.WriteLine($"วันที่ 1: {date1:yyyy-MM-dd}");
        Console.WriteLine($"วันที่ 2: {date2:yyyy-MM-dd}");
        
        // คำนวณความต่าง
        TimeSpan diff = date2.Subtract(date1);
        
        Console.WriteLine($"\nความต่าง (TimeSpan): {diff}");
        Console.WriteLine($"จำนวนวัน: {diff.TotalDays:F1} วัน");
        Console.WriteLine($"จำนวนชั่วโมง: {diff.TotalHours:F1} ชั่วโมง");
        Console.WriteLine($"จำนวนนาที: {diff.TotalMinutes:F1} นาที");
        Console.WriteLine($"จำนวนวินาที: {diff.TotalSeconds:F0} วินาที");
        
        // แยกส่วนประกอบ
        Console.WriteLine($"\n--- แยกส่วนประกอบ ---");
        Console.WriteLine($"วัน: {diff.Days}");
        Console.WriteLine($"ชั่วโมง: {diff.Hours}");
        Console.WriteLine($"นาที: {diff.Minutes}");
        Console.WriteLine($"วินาที: {diff.Seconds}");
        Console.WriteLine($"มิลลิวินาที: {diff.Milliseconds}");
        
        // ตัวอย่าง: คำนวณอายุ
        Console.WriteLine("\n--- คำนวณอายุ ---");
        DateTime birthDate = new DateTime(1990, 5, 15);
        DateTime today = DateTime.Today;
        TimeSpan age = today.Subtract(birthDate);
        Console.WriteLine($"เกิด: {birthDate:yyyy-MM-dd}");
        Console.WriteLine($"อายุ: {age.Days} วัน ({age.Days / 365.25:F1} ปี)");
    }
}

ผลลัพธ์

วันที่ 1: 2024-01-01
วันที่ 2: 2024-12-31

ความต่าง (TimeSpan): 364.00:00:00
จำนวนวัน: 364.0 วัน
จำนวนชั่วโมง: 8,736.0 ชั่วโมง
จำนวนนาที: 524,160.0 นาที
จำนวนวินาที: 31,449,600 วินาที

--- แยกส่วนประกอบ ---
วัน: 364
ชั่วโมง: 0
นาที: 0
วินาที: 0
มิลลิวินาที: 0

--- คำนวณอายุ ---
เกิด: 1990-05-15
อายุ: 12650 วัน (34.6 ปี)

วิธีทางเลือก: ใช้ Operator - (ลบ)

// ทั้งสองวิธีให้ผลลัพธ์เท่ากัน
TimeSpan diff1 = date2.Subtract(date1);
TimeSpan diff2 = date2 - date1; // ใช้ operator ลบ (สะดวกกว่า)

คุณสมบัติสำคัญของ TimeSpan

คุณสมบัติคำอธิบายตัวอย่าง
TotalDaysจำนวนวันทั้งหมด (ทศนิยม)364.5
Daysส่วนของวัน (จำนวนเต็ม 0-365)364
TotalHoursจำนวนชั่วโมงทั้งหมด8736.0
Hoursส่วนของชั่วโมง (0-23)0
TotalMinutesจำนวนนาทีทั้งหมด524160.0
TotalSecondsจำนวนวินาทีทั้งหมด31449600
TotalMillisecondsจำนวนมิลลิวินาทีทั้งหมด31449600000

การคำนวณอายุที่แม่นยำ

public static int CalculateAge(DateTime birthDate)
{
    DateTime today = DateTime.Today;
    int age = today.Year - birthDate.Year;
    
    // ปรับหากยังไม่ถึงวันเกิดในปีนี้
    if (birthDate.Date > today.AddYears(-age))
        age--;
    
    return age;
}

ข้อควรระวัง

  • Subtract() และ operator - ให้ผลลัพธ์เท่ากัน
  • TotalDays เป็น double (รวมเศษส่วนวัน) ส่วน Days เป็น int (เฉพาะส่วนเต็ม)
  • สำหรับการคำนวณอายุ/ระยะเวลาที่ยาวนาน ควรพิจารณาปีอธิกสุรทิน
  • DateTime คำนวณใน Local Time - หากต้องการ UTC ให้ใช้ DateTime.UtcNow