2009-08-24 48 views
39

Trên trang web của tôi, tôi cần phải biết múi giờ mọi người nằm ở đâu, để hiển thị thông báo cho họ vào đúng thời điểm. Tôi không chắc chắn những gì để được tìm kiếm trong một điều khoản của một hướng dẫn về cách làm điều này.Làm thế nào để làm múi giờ trong ASP.NET MVC?

Điều tôi định làm là: khi người dùng truy cập vào trang web của tôi, họ sẽ đặt múi giờ của họ bằng cách chọn múi giờ từ danh sách thả xuống. Tôi sẽ lưu trữ các thiết lập của họ trong cơ sở dữ liệu của tôi và sử dụng nó để tính thời gian.

Tôi không chắc mình cần gì. Thời gian cơ sở dữ liệu của tôi sẽ được lưu trữ như thế nào? Tôi đọc ở đâu đó rằng nó nên được lưu trữ như UTC. Làm cách nào để thiết lập cơ sở dữ liệu của tôi để thực hiện việc này? Ngoài ra, tôi sẽ được trên một trang web lưu trữ được chia sẻ vì vậy nó đã được thiết lập theo một cách mà tôi có thể làm điều đó (có thể thông qua webconfig?).

Tiếp theo, tôi sẽ cần danh sách tất cả các múi giờ làm trình trợ giúp HTML hoặc HTML thông thường. Tôi thực sự không muốn làm một cái.

Sau đó, như tôi đã nói, tôi cần một hướng dẫn cho tôi biết phải làm gì. Tôi nghĩ rằng đó là thêm và trừ các công cụ từ thời gian đó, nhưng tôi có thể sai.

Trả lời

36

Vì mục đích này, bạn chắc chắn nên lưu trữ dấu thời gian của bạn trong UTC trong cơ sở dữ liệu.

Khi bạn cần để hiển thị một ngày từ cơ sở dữ liệu trên trang web của bạn, bạn có thể làm điều này:

DateTime stamp = /* get datetime from the database here, make sure you 
        use the constructor that allows you to specify the 
        DateTimeKind as UTC. */ 

//E.g. 
//DateTime stamp = new DateTime(2009, 12, 12, 12, 12, 12, DateTimeKind.Utc); 

timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(" /* users time zone here */"); 
var convertedTime = TimeZoneInfo.ConvertTime(stamp, timeZoneInfo); 

//Print out the date and time 
//Console.WriteLine(convertedTime.ToString("yyyy-MM-dd HH-mm-ss")); 

Danh sách các múi giờ là đã có sẵn trong Net, vì vậy bạn có thể thấy this post on how to enumerate them. Đối với ASP.Net MVC, thay vì in hết thời gian, bạn sẽ muốn chỉ định datetime đã chuyển đổi thành thuộc tính của lớp mô hình của bạn để Chế độ xem của bạn có thể sử dụng nó để hiển thị.

+0

Xin chào Cảm ơn tôi sẽ bắt đầu cố gắng triển khai điều này. Tôi có một điều chưa biết. Người dùng có đến trang web của tôi không và tôi muốn xem qua db và xem thông điệp nào họ hiển thị dựa trên múi giờ của họ. Vì vậy, tôi sẽ lần đầu tiên tìm ra thời gian của họ là gì và sau đó chuyển đổi nó sang UTC? sau đó làm một nơi với nó? Vì vậy, loại đảo ngược những gì bạn làm trong ví dụ của bạn? – chobo2

+0

Vâng, ban đầu bạn đã đề cập cho phép người dùng đặt múi giờ của họ. Tuy nhiên, có một số phương pháp khám phá múi giờ của người dùng thông qua javascript, bạn có thể tìm kiếm xung quanh stackoverflow để biết thêm thông tin, ví dụ như bài đăng này: http://stackoverflow.com/questions/1017053/finding-the-clients-timezone- và văn hóa-qua-web-dịch vụ – womp

+0

Tôi tốt với họ lựa chọn múi giờ của họ và không thực sự muốn nhìn vào javascript ngay bây giờ. Tôi chỉ nói rằng đó sẽ là cách tôi sẽ bắt đầu tìm kiếm những ngày cụ thể trong db của tôi? Bằng cách cố gắng chuyển đổi trở lại UTF? – chobo2

2

Trước tiên, hãy kiểm tra MSDN để biết tài liệu về DateTime và đọc trên đó. Here is an article về Thực tiễn tốt nhất với DateTime bao gồm múi giờ và UTC.

Có, bạn nên lưu trữ UTC trong cơ sở dữ liệu của mình. Lưu trữ Ngày giờ như UTC sẽ cho phép bạn dịch thời gian sang (và từ) người dùng dựa trên múi giờ đã chọn của họ. Bạn đang đi đúng hướng!

9

Tôi không thể nhấn mạnh tầm quan trọng của việc sử dụng UTC để lưu trữ và xử lý cho bất kỳ ứng dụng nào bạn viết. Ngay cả khi bạn biết ứng dụng sẽ chỉ được sử dụng trong một múi giờ duy nhất thì vẫn dễ dàng hơn khi làm việc với UTC so với múi giờ địa phương vì các vấn đề về thời gian tiết kiệm ánh sáng ban ngày.

Thực sự bạn không cần phải làm gì ở cấp cơ sở dữ liệu. Chỉ cần tạo một cột datetime bình thường, nhưng chắc chắn rằng nó được ghi rõ ràng rằng cột được giả định là UTC.

Tôi sẽ thành thật, asp.net không phải là chuyên môn của tôi, nhưng tôi nghĩ bạn có thể có được múi giờ từ yêu cầu của khách hàng bằng cách nào đó. Trên thực tế, vì quy tắc thời gian tiết kiệm ánh sáng ban ngày có thể khá mơ hồ tùy thuộc vào khu vực nên sử dụng tập lệnh java để tính toán chênh lệch UTC và sử dụng để thực hiện chuyển đổi. Ngay cả sau khi Đạo luật chính sách năng lượng năm 2005 vẫn còn một số ngoại lệ đối với các quy tắc DST mà khá khó giải quyết ở phía máy chủ. Tuy nhiên, tôi nghĩ bạn có ý tưởng cho phép khách hàng đặt múi giờ của riêng họ sẽ hoạt động tốt trong hầu hết các trường hợp.

Các vấn đề liên quan