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

เมธอด TimeSpan.From* ใน C#: สร้าง TimeSpan จากหน่วยเวลาต่างๆ

โครงสร้าง 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/DatabaseFromSeconds(), 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)