เมธอด TimeSpan.Subtract() ใน C# ใช้ลบช่วงเวลา (TimeSpan) อีกช่วงหนึ่งออกจาก instance นี้ คืนค่า TimeSpan ใหม่ที่เป็นผลต่าง (ไม่เปลี่ยนค่าต้นฉบับ)
รูปแบบไวยากรณ์ (Syntax)
public TimeSpan Subtract(TimeSpan ts);
ts: ช่วงเวลาที่ต้องการลบ- คืนค่า : TimeSpan ใหม่ = this - ts
ตัวอย่างที่ 1: ลบช่วงเวลาต่างๆ พร้อม Compare
using System;
public class Demo
{
public static void Main()
{
TimeSpan span1 = TimeSpan.FromTicks(1); // 1 tick = 100ns
TimeSpan span2 = new TimeSpan(1); // 1 tick (same)
TimeSpan span3 = TimeSpan.FromHours(1); // 1 hour
TimeSpan span4 = TimeSpan.FromMilliseconds(1); // 1 ms
TimeSpan span5 = TimeSpan.FromMinutes(1); // 1 minute
TimeSpan span6 = TimeSpan.FromMinutes(1); // 1 minute
Console.WriteLine("span1 = " + span1);
Console.WriteLine("span2 = " + span2);
Console.WriteLine("span3 = " + span3);
Console.WriteLine("span4 = " + span4);
Console.WriteLine("span5 = " + span5);
Console.WriteLine("Compare(span1, span2) = " + TimeSpan.Compare(span1, span2)); // 0
Console.WriteLine("Compare(span2, span3) = " + TimeSpan.Compare(span2, span3)); // -1
Console.WriteLine("Compare(span1, span3) = " + TimeSpan.Compare(span1, span3)); // -1
Console.WriteLine("Compare(span3, span4) = " + TimeSpan.Compare(span3, span4)); // 1
Console.WriteLine("Compare(span4, span5) = " + TimeSpan.Compare(span4, span5)); // -1
TimeSpan res1 = span1.Subtract(span2); // 0
TimeSpan res2 = span2.Subtract(span2); // 0
Console.WriteLine("span1 - span2 = " + res1);
Console.WriteLine("span2 - span2 = " + res2);
}
}
ผลลัพธ์
span1 = 00:00:00.0000001 span2 = 00:00:00.0000001 span3 = 01:00:00 span4 = 00:00:00.0010000 span5 = 00:01:00 Compare(span1, span2) = 0 Compare(span2, span3) = -1 Compare(span1, span3) = -1 Compare(span3, span4) = 1 Compare(span4, span5) = -1 span1 - span2 = 00:00:00 span2 - span2 = 00:00:00
ตัวอย่างที่ 2: ลบช่วงเวลาที่มีค่ามากกว่า (ผลลัพธ์เป็นลบ)
using System;
public class Demo
{
public static void Main()
{
TimeSpan span1 = TimeSpan.FromTicks(1500); // 0.00015 sec
TimeSpan span2 = new TimeSpan(2, 40, 55); // 2:40:55
TimeSpan span3 = TimeSpan.FromHours(5); // 5:00:00
TimeSpan span4 = TimeSpan.FromMilliseconds(1000); // 1 sec
TimeSpan span5 = TimeSpan.FromMinutes(50); // 50 min
TimeSpan span6 = TimeSpan.FromMinutes(50); // 50 min
Console.WriteLine("span1 = " + span1);
Console.WriteLine("span2 = " + span2);
Console.WriteLine("span3 = " + span3);
Console.WriteLine("span4 = " + span4);
Console.WriteLine("span5 = " + span5);
Console.WriteLine("Compare(span1, span2) = " + TimeSpan.Compare(span1, span2)); // -1
Console.WriteLine("Compare(span2, span3) = " + TimeSpan.Compare(span2, span3)); // -1
Console.WriteLine("Compare(span1, span3) = " + TimeSpan.Compare(span1, span3)); // -1
Console.WriteLine("Compare(span3, span4) = " + TimeSpan.Compare(span3, span4)); // 1
Console.WriteLine("Compare(span4, span5) = " + TimeSpan.Compare(span4, span5)); // -1
TimeSpan res1 = span1.Subtract(span2); // Negative result
TimeSpan res2 = span2.Subtract(span2); // Zero
Console.WriteLine("span1 - span2 = " + res1);
Console.WriteLine("span2 - span2 = " + res2);
}
}
ผลลัพธ์
span1 = 00:00:00.0001500 span2 = 02:40:55 span3 = 05:00:00 span4 = 00:00:01 span5 = 00:50:00 Compare(span1, span2) = -1 Compare(span2, span3) = -1 Compare(span1, span3) = -1 Compare(span3, span4) = 1 Compare(span4, span5) = -1 span1 - span2 = -02:40:54.9998500 span2 - span2 = 00:00:00
สรุปและข้อสังเกต
- TimeSpan เป็น immutable - Subtract() คืน instance ใหม่
- ผลลัพธ์อาจเป็น Negative TimeSpan (ถ้าลบค่ามากกว่า)
- ใช้
-operator ได้:var diff = span1 - span2; - Overflow จะโยน
OverflowException(นอกช่วง MinValue~MaxValue) - คู่กับ
Add()สำหรับคำนวณ Date/Time arithmetic
การใช้งานจริง: คำนวณระยะเวลา
DateTime start = DateTime.Now;
// ... ทำงานบางอย่าง ...
DateTime end = DateTime.Now;
TimeSpan duration = end - start; // ใช้ operator - กับ DateTime ได้ TimeSpan
Console.WriteLine($"Elapsed: {duration.TotalSeconds} seconds");