2013-01-10 11 views
6

C# oferuje sposób uzyskania bieżącej daty przez DateTime.Now. Ale problem polega na tym, że mój serwer jest w Stanach Zjednoczonych i dostaję czas w USA, kiedy używam DateTime.NowC# i Bieżący czas lokalny dla różnych krajów

Czy istnieje sposób, aby uzyskać bieżący czas lokalny dla określonego kraju w C#, ponieważ moi użytkownicy są z całego świata? (Mam ustawienia regionalne dla każdego użytkownika, więc jeśli mogę uzyskać aktualny czas dla każdego locale, to jestem bezpieczny)

Widziałem sposób, using Time Zone, ale muszę zachować strefę czasową w stosunku do kraju.

Szukałem i większość z pytań dotyczy konwersji czasu UTC na czas lokalny i odwrotnie. Mam nadzieję, że ktoś mógłby mnie oświecić.

+1

dont zaoferować rozwiązanie, ale czytać bloga [Co złego datetime mimo wszystko] (http: // noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html) w przypadku problemów związanych z DateTime/DateTimeOffet. . – Tilak

+0

[Pobierz strefę czasową według kraju i regionu] (http://stackoverflow.com/q/7977736) –

+1

Pamiętaj, że niektóre kraje obejmują kilka stref czasowych. Zatem znajomość tylko kraju może nie wystarczyć. Lepiej poznać bezpośrednio strefę czasową użytkownika ze swojego komputera. – Guillaume

Odpowiedz

4

Zaoszczędź czas na swoim serwerze, korzystając z czasu UTC (DateTime.UtcNow), a następnie, w zależności od strefy czasowej użytkownika, zmienisz ten czas. Nigdy nie zapisuj czasu lokalnego w db

+0

Czy przeczytałeś [Co jest źle z datetime w każdym razie] (http://noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html). DateTime + lokalna strefa czasowa + dzień Oszczędność światła nie jest tak łatwa do rozwiązania, jak się wydaje – Tilak

+0

zobacz ten wpis http://stackoverflow.com/questions/8614323/convert-server-utc-time-to-client-local-time –

+0

to jest tak samo jak DateTime.Now.ToUniversalTime()? –

2

Wystarczy spojrzeć na klasę TimeZoneInfo. Powinieneś być w stanie konwertować czas lokalny z serwera na serwer, utrzymując tam czas DST (czas letni).

DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("AppTimeZone")); 

Można również znaleźć implementacja Open Source strefie czasowej jednym z wielkich Jon Skeet Noda Time

Powiązane problemy