เมธอด 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