Tôi sẽ nói rằng bạn nên sử dụng UTC để tính toán các khoảng thời gian, do đó bạn tránh được các vấn đề về ước giờ mùa hè và sau đó sử dụng localtime chỉ hiển thị.
DateTime.ToLocalTime cho UTC theo bất kỳ múi giờ địa phương nào và sau đó DateTime.ToUniversalTime để chuyển đổi từ giờ địa phương thành UTC.
Chỉnh sửa sau khi bình luận 1
Tôi mang nó sau đó bạn sau khi hiển thị một múi giờ khác nhau để mà các máy chủ?
Nếu bạn đang sử dụng trang web để truy cập vào máy chủ của mình, hãy sử dụng HttpRequest.UserLanguages để giúp tạo đối tượng CultureInfo và sử dụng đối tượng đó để phân tích cú pháp đối tượng DateTime của bạn. Nhìn vào đây để được giải thích đầy đủ: Microsoft link on displaying local user time for web pages.
Nếu bạn đang sử dụng kiến trúc máy chủ khách, khi đó cuộc gọi LocalTime ở phía máy khách sẽ hiển thị LocalTime cho máy khách. Sau đó bạn chuyển nó sang UTC để gửi lại cho máy chủ của bạn.
Dù bằng cách nào, máy chủ của bạn không cần biết máy khách ở đâu nếu bạn có nhiều khách hàng trong nhiều múi giờ thì tất cả các phép tính sẽ khớp nhau. Nó cũng sẽ cho phép bạn hiển thị thời gian trong bất kỳ múi giờ nào bạn muốn bằng cách sử dụng các đối tượng văn hóa khác nhau.
Chỉnh sửa 2 sao chép bình luận thứ hai của tôi
Bạn có thể lấy dữ liệu thời gian ở định dạng UTC từ máy chủ. Sau đó, bạn có thể chuyển đổi nó bằng DateTime.ToLocalTime hoặc DateTime.ToUniversalTime được requried. Nếu bạn cũng bao gồm ngày tháng và cần phải đối phó với các định dạng dd/MM/yyyy và định dạng dd/MM/yyyy của Mỹ, bạn có thể sử dụng lớp CultureInfo để phân tích giá trị DateTime tương ứng. Nghe có vẻ như nhiều công việc hơn những gì bạn có vào lúc này, nhưng nó có nghĩa là nếu bạn di chuyển máy chủ của bạn một lần nữa thì bạn không cần phải xử lý lại xử lý DateTime.
Một điểm mới
Một điểm cần xem xét là đồng bộ hóa đồng hồ giữa máy chủ và các khách hàng sử dụng NTP (Network Time Protocol) hoặc SNTP (Simple Network Time Protocol) nếu nó là đủ chính xác. Tôi không biết bạn đang sử dụng hệ điều hành nào nhưng điều này được dịch vụ thời gian Windows Server sử dụng để đồng bộ hóa mạng.
Xin chào Jon, Cảm ơn bạn đã trả lời. Những gì bạn sẽ đề nghị là giải pháp tốt nhất trong số 2? tôi sẽ tạo một múi giờ tùy chỉnh hay sử dụng TimeZoneInfo.FindSystemTimeZoneById ("Giờ chuẩn miền Đông"); xem xét rằng nó sẽ chăm sóc tiết kiệm ánh sáng ban ngày. Và làm thế nào để tôi xử lý vấn đề này trong các thủ tục lưu sẵn đang sử dụng phương thức getdate() và dùng thời gian IST? – Shetty
Tôi không biết về các thủ tục được lưu trữ, phải trung thực - nếu có thể, chuyển UTC vào chúng và làm cho chúng hiểu UTC. Đối với việc bạn có nên sử dụng múi giờ tùy chỉnh của Giờ chuẩn miền Đông hay không, tùy thuộc vào việc bạn muốn múi giờ * luôn luôn * 4 giờ sau giờ UTC hay múi giờ phù hợp với Giờ chuẩn miền Đông. Ban đầu bạn đã nói rằng bạn cần sử dụng EDT "cho tất cả các mục đích thời gian" - Tôi khuyên bạn nên kiểm tra xem bạn có * thực sự * cần EDT hay không hoặc bạn có cần Giờ chuẩn miền Đông hay không. –
Ok Jon. Tôi được yêu cầu sử dụng thời gian thành phố * Boston * làm thời gian tiêu chuẩn cho tất cả các mục đích thời gian, nằm dưới EDT. Tôi không biết nhiều về tiết kiệm ánh sáng ban ngày. Tôi muốn ứng dụng của mình thực hiện lần này mặc dù nó đang chạy trên máy chủ IST. Trước đây nó đã được trong một máy chủ khác nhau đang chạy trong múi giờ EDT và tôi đã không có vấn đề như vậy. – Shetty