2011-12-21 25 views
10

Tôi cần đặt múi giờ mặc định cho múi giờ ASP.NET của tôi thành Asia/Dhaka hoặc GMT + 6. Nhưng tôi không thể tìm cách thay đổi nó trên toàn cầu. Có rất nhiều tài liệu tham khảo trên Stackoverflow và phần còn lại của trang web để làm điều này bằng cách nhận thông tin múi giờ và tính toán thời gian chính xác cho mỗi lần tôi cần một đối tượng DateTime.Làm thế nào để thay đổi múi giờ cho một ứng dụng asp.net

Nhưng hãy tin tôi đi, tôi không muốn làm điều này theo cách này. Vì vậy, không cho tôi bất kỳ đề nghị như thế. Tôi muốn đặt múi giờ thành Asia/Dhaka hoặc GMT + 6 tốt hơn là từ web.config. (Tương tự như chúng ta làm trong php với php.ini) Vì vậy, mỗi lần tôi cần đối tượng DateTime, thời gian được đánh giá bằng múi giờ của tôi bất kể múi giờ là gì đối với máy chủ.

Điều này có khả thi không? Nếu có thể thì làm thế nào ?? Cảm ơn trước vì giải pháp :)

+4

* Tại sao * bạn không muốn làm những việc đúng cách? Hãy nhớ rằng một 'DateTime' không * có * một múi giờ vốn có. (Đó là một kiểu khá kỳ quặc theo một số cách.) Bạn nên * thường * (nhưng không phải luôn luôn) giữ mọi thứ trong UTC trừ khi nó đến hoặc từ người dùng - tại sao bạn không muốn theo mẫu chung đó? –

+1

vấn đề là tôi có nhiều đối tượng datetime trên 100 trang aspx và cần hiển thị chúng theo múi giờ địa phương. tôi không chống lại việc giữ mọi lúc trong UTC. Nhưng tôi cần một giải pháp để hiển thị thời gian trong múi giờ địa phương trong các trang aspx mà không thay đổi tất cả các trang. –

+1

Có vẻ như những gì bạn thực sự cần là một nơi trung tâm để đặt mã hiển thị 'DateTime', sau đó bạn * gọi * ở mọi nơi bạn cần để hiển thị' DateTime'. Bạn có thể cần phải thay đổi tất cả 100 trang của bạn một lần, nhưng sau đó bất kỳ thay đổi nào khác về cách bạn cần ngày/giờ được hiển thị sẽ chỉ cần thay đổi ở một nơi duy nhất. –

Trả lời

8

Xin lỗi, không có cách nào trong .NET để thay đổi múi giờ trên toàn cầu.

Cách duy nhất bạn có là thay đổi múi giờ của máy chủ hoặc viết lại tất cả mã của bạn.

Cách tốt nhất là không dựa vào múi giờ của hệ thống (không bao giờ sử dụng DateTime.Now).

Bạn nên xử lý tất cả ngày làm ngày Utc và sau đó chuyển đổi thành một khu vực cụ thể khi hiển thị chúng cho người dùng.

Thậm chí nếu bạn quản lý để xử lý múi giờ trong ứng dụng ASP.NET của bạn, vẫn còn thời gian trên SQL Server, ví dụ như chức năng GETTIME. Nếu ứng dụng của bạn được viết hoàn toàn bằng UTC, chức năng máy chủ SQL của bạn cũng sẽ hoạt động.

+0

Cài đặt toàn cầu hóa sẽ không thay đổi cách đối tượng DateTime hoạt động như được đánh dấu ở chỗ hầu hết các quốc gia sẽ có nhiều múi giờ để không biết sử dụng múi giờ nào. – davidsleeps

+1

cảm ơn đề xuất, có vẻ như nó thay đổi định dạng theo vùng văn hóa. Nhưng không bù đắp thời gian. Tôi đồng ý xử lý tất cả các ngày như utc, nhưng cần một cách chuyển đổi chúng mỗi khi tôi hiển thị. Trong ứng dụng của tôi, tôi đã có hàng trăm đối tượng DateTime. Tôi đang tìm kiếm một cách khác hơn là tìm kiếm tất cả những điều này và thay thế chúng từng cái một bằng một phương pháp util. : s: s –

+0

Giúp rất nhiều tìm kiếm giải pháp tương tự cho ứng dụng của tôi. gần như cùng một câu hỏi được hỏi trong http://stackoverflow.com/questions/14293858/how-to-set-default-time-zone-in-asp-net-application. – Pravin

2

Bạn có thể thay đổi TimeZone ... Và Nhận Ngày

DateTime utcTime = DateTime.UtcNow; 
    TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
    Str.Append(custDateTime.ToString()); 
1

Tôi có một vấn đề với các hướng dẫn:

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 

... Vì vậy, tôi tạo ra một TimeZoneInfo cá nhân.

Ở đây mã của tôi ...

public static DateTime DateNow() 
     { 
      DateTime utcTime = DateTime.UtcNow; 
      TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("COLOMBIA", new TimeSpan(-5, 0, 0), "Colombia", "Colombia"); 
      DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
      return custDateTime; 
     } 
Các vấn đề liên quan