เมธอด Add() ของโครงสร้าง TimeSpan ใช้บวกช่วงเวลาสองช่วงเข้าด้วยกัน คืนค่า TimeSpan ใหม่ที่เป็นผลรวม ไม่เปลี่ยนค่าเดิม (Immutable)
รูปแบบการใช้งาน
TimeSpan t1 = TimeSpan.FromHours(1);
TimeSpan t2 = TimeSpan.FromMinutes(30);
TimeSpan result = t1.Add(t2); // 1 ชั่วโมง 30 นาที
โค้ดตัวอย่างสมบูรณ์
using System;
public class Demo
{
public static void Main()
{
// สร้าง TimeSpan จากหน่วยต่างๆ
TimeSpan t1 = TimeSpan.FromMinutes(1); // 1 นาที
TimeSpan t2 = TimeSpan.FromMinutes(2); // 2 นาที
Console.WriteLine($"TimeSpan แรก: {t1}");
Console.WriteLine($"TimeSpan ที่สอง: {t2}");
// บวกด้วยเมธอด Add()
TimeSpan result = t1.Add(t2);
Console.WriteLine($"ผลรวม (Add): {result}"); // 00:03:00
// บวกด้วย Operator + (สะดวกกว่า)
TimeSpan result2 = t1 + t2;
Console.WriteLine($"ผลรวม (+): {result2}"); // 00:03:00
// ตัวอย่างซับซ้อนกว่า
Console.WriteLine("\n--- ตัวอย่างการบวกหลายช่วงเวลา ---");
TimeSpan workTime = TimeSpan.FromHours(8);
TimeSpan breakTime = TimeSpan.FromMinutes(45);
TimeSpan overtime = TimeSpan.FromHours(2);
TimeSpan totalWork = workTime.Add(breakTime).Add(overtime);
Console.WriteLine($"เวลาทำงาน: {workTime}");
Console.WriteLine($"พัก: {breakTime}");
Console.WriteLine($"โอที: {overtime}");
Console.WriteLine($"รวม: {totalWork}"); // 10:45:00
// การบวกหลายรายการด้วย LINQ
TimeSpan[] periods =
{
TimeSpan.FromHours(1),
TimeSpan.FromMinutes(30),
TimeSpan.FromSeconds(45),
TimeSpan.FromMilliseconds(500)
};
TimeSpan sum = periods.Aggregate(TimeSpan.Zero, (acc, ts) => acc.Add(ts));
Console.WriteLine($"\nผลรวมจากอาร์เรย์: {sum}"); // 01:30:45.5000000
}
}
ผลลัพธ์
TimeSpan แรก: 00:01:00
TimeSpan ที่สอง: 00:02:00
ผลรวม (Add): 00:03:00
ผลรวม (+): 00:03:00
--- ตัวอย่างการบวกหลายช่วงเวลา ---
เวลาทำงาน: 08:00:00
พัก: 00:45:00
โอที: 02:00:00
รวม: 10:45:00
ผลรวมจากอาร์เรย์: 01:30:45.5000000
เมธอดที่เกี่ยวข้องกับการคำนวณ TimeSpan
| เมธอด/Operator | คำอธิบาย | ตัวอย่าง |
|---|---|---|
Add(TimeSpan) | บวก TimeSpan อีกตัวหนึ่ง | t1.Add(t2) |
+ (Operator) | บวก TimeSpan (Syntax สะดวกกว่า) | t1 + t2 |
Subtract(TimeSpan) | ลบ TimeSpan อีกตัวหนึ่ง | t1.Subtract(t2) |
- (Operator) | ลบ TimeSpan | t1 - t2 |
Negate() | ค่าตรงข้าม (Negative) | ts.Negate() |
Multiply(double) | คูณด้วยตัวเลข (.NET 6+) | ts.Multiply(2.5) |
Divide(double) | หารด้วยตัวเลข (.NET 6+) | ts.Divide(2) |
การใช้งานจริง: คำนวณเวลาทำงานรวม
public class WorkTimeCalculator
{
private readonly List _periods = new();
public void AddPeriod(TimeSpan period) => _periods.Add(period);
public TimeSpan GetTotalTime() =>
_periods.Aggregate(TimeSpan.Zero, (sum, ts) => sum.Add(ts));
public TimeSpan GetAverageTime() =>
_periods.Count > 0
? TimeSpan.FromTicks(_periods.Sum(ts => ts.Ticks) / _periods.Count)
: TimeSpan.Zero;
}
// ใช้งาน
var calc = new WorkTimeCalculator();
calc.AddPeriod(TimeSpan.FromHours(8));
calc.AddPeriod(TimeSpan.FromHours(7.5));
calc.AddPeriod(TimeSpan.FromHours(8.25));
Console.WriteLine($"รวม: {calc.GetTotalTime()}"); // 23:45:00
Console.WriteLine($"เฉลี่ย: {calc.GetAverageTime()}"); // 07:55:00
ข้อควรระวัง
TimeSpanเป็น Immutable -Add()คืนค่าใหม่ ไม่เปลี่ยนตัวเดิม- ใช้ Operator
+แทนAdd()เพื่อความอ่านง่าย - ผลลัพธ์อาจเกิน
TimeSpan.MaxValue(ประมาณ 10 ล้านวัน) → โยนOverflowException - สำหรับการบวกหลายค่า ใช้
Aggregate(TimeSpan.Zero, (a, b) => a + b)หรือ LINQSum()(ต้องแปลงเป็น Ticks ก่อน)