โครงสร้าง TimeSpan มีเมธอดสแตติก From* หลายตัวสำหรับสร้าง TimeSpan จากหน่วยเวลาต่างๆ อย่างสะดวก ไม่ต้องคำนวณ Ticks เอง
เมธอด From* ทั้งหมด
| เมธอด | พารามิเตอร์ | คำอธิบาย |
FromDays(double) | จำนวนวัน (รองรับทศนิยม) | 1.5 วัน = 36 ชั่วโมง |
FromHours(double) | จำนวนชั่วโมง | 2.5 ชั่วโมง = 2 ชม. 30 นาที |
FromMinutes(double) | จำนวนนาที | 90 นาที = 1 ชม. 30 นาที |
FromSeconds(double) | จำนวนวินาที | 3661 วินาที = 1 ชม. 1 นาที 1 วินาที |
FromMilliseconds(double) | จำนวนมิลลิวินาที | 1500 ms = 1.5 วินาที |
FromTicks(long) | จำนวน Ticks | สร้างจาก Ticks โดยตรง |
โค้ดตัวอย่างสมบูรณ์
using System;
public class Demo
{
public static void Main()
{
Console.WriteLine("=== สร้าง TimeSpan จากหน่วยต่างๆ ===");
TimeSpan t1 = TimeSpan.FromDays(1); // 1 วัน
TimeSpan t2 = TimeSpan.FromHours(1); // 1 ชั่วโมง
TimeSpan t3 = TimeSpan.FromMinutes(1); // 1 นาที
TimeSpan t4 = TimeSpan.FromSeconds(1); // 1 วินาที
TimeSpan t5 = TimeSpan.FromMilliseconds(1); // 1 มิลลิวินาที
TimeSpan t6 = TimeSpan.FromTicks(10000000); // 10 ล้าน Ticks = 1 วินาที
Console.WriteLine($"FromDays(1): {t1}"); // 1.00:00:00
Console.WriteLine($"FromHours(1): {t2}"); // 01:00:00
Console.WriteLine($"FromMinutes(1): {t3}"); // 00:01:00
Console.WriteLine($"FromSeconds(1): {t4}"); // 00:00:01
Console.WriteLine($"FromMilliseconds(1):{t5}"); // 00:00:00.0010000
Console.WriteLine($"FromTicks(10000000):{t6}"); // 00:00:01
Console.WriteLine("\n=== ค่าทศนิยม (Fractional values) ===");
Console.WriteLine($"FromDays(1.5): {TimeSpan.FromDays(1.5)}"); // 1.12:00:00 (36 ชม.)
Console.WriteLine($"FromHours(2.5): {TimeSpan.FromHours(2.5)}"); // 02:30:00
Console.WriteLine($"FromMinutes(90): {TimeSpan.FromMinutes(90)}"); // 01:30:00
Console.WriteLine($"FromSeconds(3661): {TimeSpan.FromSeconds(3661)}"); // 01:01:01
Console.WriteLine("\n=== การคำนวณระยะเวลาในชีวิตจริง ===");
// คำนวณเวลาทำงานในสัปดาห์
double workHoursPerDay = 8.5; // 8 ชม. 30 นาที
int workDaysPerWeek = 5;
TimeSpan weeklyWork = TimeSpan.FromHours(workHoursPerDay * workDaysPerWeek);
Console.WriteLine($"เวลาทำงานต่อสัปดาห์: {weeklyWork}"); // 1.18:30:00 (42.5 ชม.)
// คำนวณเวลาที่เหลือจนถึงวันหยุด
DateTime now = DateTime.Now;
DateTime friday = now.AddDays((DayOfWeek.Friday - now.DayOfWeek + 7) % 7);
friday = friday.Date.AddHours(17); // 17:00 น.
TimeSpan untilFriday = friday - now;
Console.WriteLine($"เวลาจนถึงวันศุกร์ 17:00: {untilFriday}");
}
}
ผลลัพธ์
=== สร้าง TimeSpan จากหน่วยต่างๆ ===
FromDays(1): 1.00:00:00
FromHours(1): 01:00:00
FromMinutes(1): 00:01:00
FromSeconds(1): 00:00:01
FromMilliseconds(1):00:00:00.0010000
FromTicks(10000000):00:00:01
=== ค่าทศนิยม (Fractional values) ===
FromDays(1.5): 1.12:00:00
FromHours(2.5): 02:30:00
FromMinutes(90): 01:30:00
FromSeconds(3661): 01:01:01
=== การคำนวณระยะเวลาในชีวิตจริง ===
เวลาทำงานต่อสัปดาห์: 1.18:30:00
เวลาจนถึงวันศุกร์ 17:00: 2.14:30:45.1234567
การเลือกใช้เมธอด From* ใด
| สถานการณ์ | เมธอดที่แนะนำ |
| มีค่าวินาที/มิลลิวินาทีจาก API/Database | FromSeconds(), FromMilliseconds() |
| คำนวณจากชั่วโมง/นาที (Human readable) | FromHours(), FromMinutes() |
| คำนวณจากวัน (Business logic) | FromDays() |
| มีค่า Ticks อยู่แล้ว (High precision) | FromTicks() |
| สร้างจากองค์ประกอบแยก (วัน, ชม., นาที, วินาที) | new TimeSpan(days, hours, minutes, seconds) |
Constructor แบบเต็มรูปแบบ
// TimeSpan(int days, int hours, int minutes, int seconds)
TimeSpan ts1 = new TimeSpan(1, 2, 30, 45); // 1 วัน 2 ชม. 30 นาที 45 วินาที
// TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds)
TimeSpan ts2 = new TimeSpan(1, 2, 30, 45, 500); // + 500 ms
// TimeSpan(long ticks) - จาก Ticks โดยตรง
TimeSpan ts3 = new TimeSpan(36000000000); // 1 ชั่วโมง
ข้อควรระวัง
- ทุกเมธอด
From* รับ double (ยกเว้น FromTicks) - รองรับค่าทศนิยม
- ค่าลบได้:
TimeSpan.FromHours(-1) = -01:00:00
- ค่าที่ใหญ่เกิน
TimeSpan.MaxValue จะโยน OverflowException
- ความแม่นยำ: ใช้
FromTicks สำหรับความแม่นยำสูงสุด (1 Tick = 100 ns)