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

เมธอด TimeSpan.Subtract() ใน C# : ลบช่วงเวลาออกจากกัน

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