2011-12-21 13 views
10

Potrzebuję ustawić domyślną strefę czasową dla mojej strefy czasowej ASP.NET do strefy Asia/Dhaka lub GMT + 6. Ale nie mogę znaleźć sposobu, aby zmienić go globalnie. Istnieje wiele odnośników na temat Stackoverflow i reszta sieci, aby to zrobić, pobierając informacje o strefie czasowej i obliczając prawidłowy czas za każdym razem, gdy potrzebuję obiektu DateTime.Jak zmienić strefę czasową dla aplikacji asp.net

Zaufaj mi, nie chcę tego robić w ten sposób. Więc nie dawaj mi takich sugestii. Chcę ustawić strefę czasową na Asia/Dhaka lub GMT + 6, najlepiej z web.config. (Podobne do tego robimy w php z php.ini) Tak więc za każdym razem, gdy potrzebuję obiektu DateTime, czas jest oceniany z moją strefą czasową bez względu na strefę czasową dla serwera.

Czy to możliwe? Jeśli to możliwe, to w jaki sposób? Z góry dziękujemy za rozwiązanie :)

+4

* * Dlaczego nie chcesz robić rzeczy właściwie? Należy pamiętać, że 'DateTime' nie * ma * nieodłączną strefę czasową. (Pod pewnymi względami jest to dość dziwny typ.) Powinieneś * zazwyczaj * (ale nie zawsze) utrzymywać wszystko w UTC inaczej niż wtedy, gdy przychodzi lub od użytkownika - dlaczego nie chcesz podążać za tym wspólnym wzorcem? –

+1

Problem polega na tym, że mam wiele obiektów datetime na ponad 100 stronach aspx i muszę renderować je w lokalnej strefie czasowej. Nie jestem przeciwny zachowaniu za każdym razem w UTC. Ale potrzebuję rozwiązania do renderowania czasu w lokalnej strefie czasowej na stronach aspx bez zmiany wszystkich stron. –

+1

To brzmi jak coś, czego naprawdę potrzebujesz * to jedno centralne miejsce do umieszczenia kodu renderującego 'DateTime', który następnie * wywołujesz * wszędzie tam, gdzie potrzebujesz renderować' DateTime'. Konieczna może być zmiana wszystkich 100 stron tylko raz, ale wszelkie dalsze zmiany sposobu renderowania dat/czasu będą wymagać zmiany tylko w jednym miejscu. –

Odpowiedz

8

Niestety, nie ma możliwości w .NET do globalnej zmiany strefy czasowej.

Jedynym sposobem jest zmiana strefy czasowej serwera lub przepisanie całego kodu.

Najlepsza praktyka polega na tym, aby w ogóle nie polegać na strefie czasowej systemu (nigdy nie używać funkcji DateTime.Now).

Powinieneś obsługiwać wszystkie daty jako daty Utc, a następnie przekonwertować je na określoną strefę podczas wyświetlania ich użytkownikom.

Nawet jeśli uda się obsłużyć strefy czasowe w aplikacji ASP.NET, na serwerze SQL są nadal strefy czasowe, na przykład GETTIME funtion. Jeśli twoja aplikacja jest w całości napisana w UTC, twoja funkcja serwera SQL również zadziała.

+0

Ustawienie globalizacji nie zmieni tego, jak działa obiekt DateTime w sposób podświetlony, ponieważ większość krajów będzie mieć wiele stref czasowych, więc nie będzie wiedział, którego użyć. – davidsleeps

+1

dzięki za sugestię, wygląda na to, że zmienia format zgodnie ze strefą kultury. Ale nie przesunięcie czasowe. Zgadzam się traktować wszystkie daty jako utc, ale potrzebuję sposobu na ich konwersję za każdym razem, gdy wyświetlam. W mojej aplikacji mam już setki obiektów DateTime. Szukam innego sposobu niż wyszukiwanie tych wszystkich i zastępowanie ich jedną po drugiej metodą util. : s: s –

+0

Pomaga dużo szukać tego samego rozwiązania dla mojej aplikacji. prawie to samo pytanie jest zadawane w http://stackoverflow.com/questions/14293858/how-to-set-default-time-zone-in-asp-net-application. – Pravin

2

można zmienić TimeZone ... I Get Data

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

Mam problem z instrukcją:

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 

Więc ... tworzę prywatnego TimeZoneInfo.

Oto mój kod ...

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; 
     } 
Powiązane problemy