Nó sẽ không và nó trong thực tế KHÔNG THỂ, dựa trên thực tế là nó không hoặc là lực lượng bạn sử dụng UTC để xây dựng một DateTime cũng không cho phép bạn chỉ định cho dù DST có hiệu lực khi bạn xây dựng một DateTime với một giá trị thời gian địa phương. Hơn nữa, nó cho phép các chế độ (LT hoặc UTC) được "không xác định", mà chỉ là asinine.
Bằng cách cho phép xây dựng giá trị DateTime từ giá trị Giờ địa phương, có thể tạo giá trị DateTime (được chỉ định là Giờ địa phương) không rõ ràng (ví dụ: bất kỳ thời gian nào từ 1 đến 2 giờ sáng ngày 2 tháng 11 ở Hoa Kỳ, khi giờ địa phương lặp lại chính nó) và không thể được chuyển đổi xác định trở về UTC, KHÔNG GIỚI HẠN hàm tạo cung cấp một tham số để xác định xem DST có ảnh hưởng đến thời gian cục bộ đã cho hay không.
Vì không cung cấp thông số như vậy, thiết kế lớp DateTime không đầy đủ và thiếu sót, không xem xét tất cả các thông số cần thiết để chỉ định đúng thời gian cục bộ.
Tôi nghĩ đó là lý do tại sao họ tạo lớp DateTimeOffset, mà ... nếu bạn nhầm lẫn lý do tại sao một lớp dường như dư thừa như vậy tồn tại ... đó là lý do.
Kết quả là, bạn sẽ không bao giờ thực hiện bất kỳ loại phép tính nào với bất kỳ cá thể DateTime nào không được đặt thành DateTimeMode.Utc. Chỉ sử dụng UTC. Bạn thực sự không thể chuyển đổi sang hoặc từ LT, bởi vì nó BUSTED bởi hai lỗi khác nhau, cả hai cách. 1.Đi từ LT đến UTC bị vỡ vì, như đã đề cập, nó không cho phép bạn chỉ định liệu DST có hiệu lực trong một giờ không rõ ràng trong LT. Ồ, nó cũng cho phép bạn chỉ định giờ địa phương về cơ bản là không thể, chẳng hạn như giờ chúng tôi bỏ qua khi đồng hồ được đặt trước. 2. Khi chuyển đổi giá trị UTC trong quá khứ thành giờ địa phương, các ốc vít Windows có nghĩa là bù đắp cho DST dựa trên việc nó có hiệu lực vào NGAY BÂY GIỜ, đúng hơn là thời gian đã cho, mà là nghiêm trọng asinine. Tất nhiên, bạn có thể đã nhận thấy vấn đề này khi một thời gian sửa đổi bạn đã viết, lưu trữ, hoặc được sử dụng trong tên của một tập tin, một ngày cho thấy một HOUR OFF trong Windows explorer. Không, bạn không điên, Windows chỉ có một lỗi nghiêm trọng trong đó, mà họ không bao giờ tìm thấy thời gian để sửa chữa một nơi nào đó giữa việc phát hành của DOS và khuôn khổ .NET mới nhất (~ 2 thập kỷ)! Tất nhiên, lỗi đó ảnh hưởng đến hệ thống CVS và bất kỳ thứ gì theo dõi thời gian sửa đổi. Hệ thống tập tin FAT lưu trữ thời gian như thời gian địa phương, có nghĩa là nó chỉ hoàn toàn hơi say.
Không, đó KHÔNG phải là giải pháp hợp lệ. Xem bài đăng của tôi. Để PROPERLY lưu trữ thời gian địa phương phù hợp để chuyển đổi thành thời gian UTC, bạn phải chỉ định TẤT CẢ các khoản bù trừ được áp dụng từ UTC (bao gồm múi giờ VÀ DST có hiệu lực) hay không. Vì DateTime không bao giờ đầu vào cho dù DST đã hoạt động trong một thời gian cục bộ cụ thể, mọi giá trị thời gian cục bộ vốn đã không đầy đủ/thiếu sót và do đó không thích hợp cho việc chuyển đổi. Windows thậm chí còn chuyển đổi từ UTC sang Local, vì nó dường như áp dụng bù đắp DST dựa trên việc nó có hiệu lực tại thời gian gọi phương thức chứ không phải tại thời điểm đã cho, đó là asinine. – Triynko
Bạn nói rằng "chuyển đổi thành UTC sẽ tính đến tiết kiệm ánh sáng ban ngày", nhưng điều đó là không thể, bởi vì hàm tạo DateTime không bao giờ hỏi bạn liệu DST có hiệu lực hay không, vì vậy nó không thể biết liệu nó có hiệu lực trong khoảng thời gian từ 1 đến 2 giờ sáng hay không Ngày 2 tháng 11 (dù sao ở Mỹ). Nó cũng sẽ có vấn đề chuyển đổi mà giờ địa phương không tồn tại mà DateTime cho phép bạn lưu trữ mà chúng tôi bỏ qua khi chúng tôi thiết lập các đồng hồ phía trước. – Triynko
Nó thực sự khá buồn cười. ToUniversalTime sẽ làm việc cho tất cả, nhưng 2 giờ trên 2 ngày trong cả năm. Trong khi đó, ToLocalTime tương ứng (và các API bên dưới) làm cho Windows hiển thị thời gian sửa đổi tệp không chính xác trong 5 đến 7 tháng !!! trong năm, tùy thuộc vào việc tập tin đã được sửa đổi trong một phạm vi ngày mà tại đó DST "chế độ" (hoạt động hoặc không hoạt động) phù hợp với ngày hiện tại. Thật là một lỗi. – Triynko