Giả sử người dùng của bạn ở New York (GMT - 5) và máy chủ của bạn ở Ấn Độ (GMT + 5:30).
Khi người dùng thấy thời gian "địa phương" lúc 10:00 sáng (EST), máy chủ của bạn sẽ thấy thời gian "địa phương" là 7:30 tối (IST). Tuy nhiên, bằng cách sử dụng UTC ở cả hai nơi .... người dùng sẽ thấy thời gian UTC là 3 giờ chiều và máy chủ sẽ thấy thời gian UTC là 3 giờ chiều.
Sử dụng UTC ở tất cả các vị trí nhưng giữ giới thiệu múi giờ của người dùng cho phép bạn luôn hoạt động trong UTC nhưng vẫn chuyển đổi thời gian thành thời gian "cục bộ" của người dùng khi bạn muốn hiển thị cho họ.
Bạn cũng không thể dựa vào nơi máy chủ được lưu trữ trên máy chủ nếu nó là máy chủ ảo. Bạn cũng không thể giả định múi giờ mà công ty lưu trữ đặt máy chủ của họ thành. Tốt nhất để luôn mã hóa defensivly bằng cách sử dụng DateTime.UtcNow
khi lưu trữ ngày giờ trong cơ sở dữ liệu.
Để chuyển đổi thời gian tính theo giờ UTC này trở lại múi giờ của một người sử dụng, bạn sẽ cần phải làm như sau:
DateTime utcTime = new DateTime(2013, 03, 25, 10, 20, 00);
TimeZoneInfo usersTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime usersLocalTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, usersTimeZone);
Console.WriteLine(utcTime.ToString("hh:mm:ss");
Console.WriteLine(usersLocalTime.ToString("hh:mm:ss");
FYI, bạn có thể tìm thấy một danh sách các múi giờ từ:
TimeZoneInfo.GetSystemTimeZones()
Điều này sẽ in ra:
10:20:00
05:20:00
Như bạn có thể thấy, bạn sẽ cần phải biết múi giờ của người dùng.Có 2 cách để biết thời gian người sử dụng:
- Có người dùng chọn múi giờ của họ trong tùy chọn người dùng của họ
- Sử dụng một số javascript để phát hiện múi giờ của máy của họ và gửi nó trở lại với hình thức
Tôi sẽ đề xuất tùy chọn đầu tiên ở đây là tùy chọn thứ hai có thể khiến mọi thứ trở nên khó khăn hơn cho mọi người. Ví dụ, nếu họ là Vương quốc Anh dựa và bay đến các tiểu bang trong tuần. Mọi thứ sẽ thay đổi khu vực và họ có thể không nhận ra!
Đây là một dành cho @JonSkeet, anh ấy thích các câu hỏi về thời gian ngày :) – mattytommo
Hmm. Không phải là người yêu cầu nếu nó được cắm vào, nhưng: Ngày/giờ trên máy chủ có đúng không? Ít nhất, nó có khớp với cái trên hộp của bạn không? – FrankieTheKneeMan
CSONG: Múi giờ nào là máy chủ và bạn đang ở múi giờ nào? – FrankieTheKneeMan