Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Hàm xử lý thời gian (Time Functions) trong C# - DateTime

Cấu trúc DateTime (struct) trong namespace System cung cấp đầy đủ phương thức thao tác ngày/giờ. Dưới đây tập trung vào các hàm liên quan đến thời gian (Time).

Các phương thức Add* (Trả về DateTime mới - immutable)

Phương thứcMô tảVí dụ
AddHours(double)Cộng/giờ (âm = trừ)dt.AddHours(2.5)
AddMinutes(double)Cộng/phútdt.AddMinutes(-30)
AddSeconds(double)Cộng/giâydt.AddSeconds(45)
AddMilliseconds(double)Cộng/mili-giâydt.AddMilliseconds(100)
AddTicks(long)Cộng/ticks (100ns)dt.AddTicks(10000) (=1ms)
AddDays(double)Cộng/ngày (cũng ảnh hưởng thời gian)dt.AddDays(1.5)

Ví dụ: AddMilliseconds

using System;

class Program
{
    static void Main()
    {
        string fmt = "MM/dd/yyyy hh:mm:ss.fffffff";
        DateTime current = new DateTime(2018, 7, 23, 13, 0, 0);
        
        Console.WriteLine($"Original: {current.ToString(fmt)} ({current.Ticks:N0} ticks)");
        
        DateTime next = current.AddMilliseconds(1);
        Console.WriteLine($"Next (1ms): {next.ToString(fmt)} ({next.Ticks:N0} ticks)");
        
        // Thêm 1 giờ 30 phút
        DateTime later = current.AddHours(1.5);
        Console.WriteLine($"Later (1.5h): {later.ToString(fmt)}");
        
        // Trừ 45 phút
        DateTime earlier = current.AddMinutes(-45);
        Console.WriteLine($"Earlier (-45m): {earlier.ToString(fmt)}");
    }
}

Kết quả

Original: 07/23/2018 01:00:00.0000000 (636,679,476,000,000,000 ticks)
Next (1ms): 07/23/2018 01:00:00.0010000 (636,679,476,000,010,000 ticks)
Later (1.5h): 07/23/2018 02:30:00.0000000
Earlier (-45m): 07/23/2018 12:15:00.0000000

Thuộc tính Time-only (Chỉ thời gian)

Thuộc tínhKiểuMô tả
HourintGiờ (0-23)
MinuteintPhút (0-59)
SecondintGiây (0-59)
MillisecondintMili-giây (0-999)
TicklongTicks từ 00:00:00 (1 tick = 100ns)
TimeOfDayTimeSpanThời gian kể từ 00:00:00 hôm nay
DateDateTimeChỉ phần ngày (time = 00:00:00)

TimeSpan - Khoảng thời gian

TimeSpan duration = TimeSpan.FromHours(1.5);     // 1:30:00
TimeSpan ts = TimeSpan.FromMinutes(90);          // 1:30:00
TimeSpan diff = later - current;                 // Subtract DateTime → TimeSpan

Console.WriteLine($"TotalMinutes: {diff.TotalMinutes}"); // 90
Console.WriteLine($"Minutes: {diff.Minutes}");           // 30 (phần phút của 1h30m)

DateTime vs DateTimeOffset vs TimeOnly (NET 6+)

  • DateTime: Không có timezone info (Kind: Unspecified/Utc/Local). Dễ bug khi chuyển múi giờ.
  • DateTimeOffset: DateTime + Offset (UTC offset). Khuyến nghị cho logging, API, database.
  • TimeOnly / DateOnly (NET 6+): Chỉ thời gian / chỉ ngày, không timezone.
// NET 6+ TimeOnly
TimeOnly openTime = new TimeOnly(9, 0);  // 09:00
TimeOnly closeTime = openTime.AddHours(8); // 17:00