DateTime không biết độ lệch múi giờ của nó. Không có phương thức tích hợp nào để trả về giá trị chênh lệch hoặc tên múi giờ (ví dụ: EAT, CEST, EST, v.v.).
Giống như những người khác đề xuất, bạn có thể chuyển đổi ngày của mình thành UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
và sau đó chỉ tính toán sự khác biệt:
TimeSpan difference = localtime - utctime;
Ngoài ra, bạn có thể chuyển đổi lần này sang lần khác bằng cách sử dụng DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Nhưng đây là kiểu nén có tổn thất - riêng phần bù không thể cho bạn biết đó là múi giờ nào vì hai quốc gia khác nhau có thể ở các múi giờ khác nhau và có cùng thời gian chỉ trong một phần của năm (ví dụ: Nam Phi và Châu Âu). Ngoài ra, hãy lưu ý rằng thời gian tiết kiệm ánh sáng ban ngày vào mùa hè có thể được áp dụng vào các ngày khác nhau (EST và CET - chênh lệch 3 tuần).
Bạn có thể lấy tên của múi giờ hệ thống cục bộ của mình bằng cách sử dụng lớp TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Tôi đồng ý với Gerrie Schenck, hãy đọc bài viết mà anh ấy gợi ý.