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ức | Mô tả | Ví dụ |
AddHours(double) | Cộng/giờ (âm = trừ) | dt.AddHours(2.5) |
AddMinutes(double) | Cộng/phút | dt.AddMinutes(-30) |
AddSeconds(double) | Cộng/giây | dt.AddSeconds(45) |
AddMilliseconds(double) | Cộng/mili-giây | dt.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ính | Kiểu | Mô tả |
Hour | int | Giờ (0-23) |
Minute | int | Phút (0-59) |
Second | int | Giây (0-59) |
Millisecond | int | Mili-giây (0-999) |
Tick | long | Ticks từ 00:00:00 (1 tick = 100ns) |
TimeOfDay | TimeSpan | Thời gian kể từ 00:00:00 hôm nay |
Date | DateTime | Chỉ 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.
TimeOnly openTime = new TimeOnly(9, 0); // 09:00
TimeOnly closeTime = openTime.AddHours(8); // 17:00