2012-09-28 13 views
6

W mojej aplikacji ASP.NET używam kodu from here, aby znaleźć datę kompilacji aplikacji jako UTC. Wartość UTC odczytać z pliku zespołu zostaje sformatowany w następujący sposób:Dlaczego ta sama wartość DateTime spowoduje inny wyświetlany czas dla różnych użytkowników?

//DateTime time  
return time.ToString("dd MMM yyyy HH:mm:ss"); 

Teraz jeden użytkownik otwiera stronę serwowane przez tej aplikacji i widzi

28 сен 2012 04:13:56 

i zawiadomi drugą użytkownika, który otwiera tę samą stronę i widzi

27 Sep 2012 12:14:32 

Obydwa wnioski są obsługiwane przez tego samego wniosku wdrożonej do czyszczenia maszyn wirtualnych Windows Azure z tego samego pakietu, więc to na pewno dokładnie ten sam kod jest prowadzony przez obaj użytkownicy.

Wyraźnie napisy są inaczej sformatowane ze względu na różną lokalizację dla żądań różnych użytkowników. Jeden użytkownik widzi miesiąc wyświetlany jako Sep, a drugi widzi go jako сен (odpowiednik Sep w języku rosyjskim).

Dlaczego godziny się różnią? Czy są one również dostosowane zgodnie z określoną strefą czasową, która zależy od lokalizacji?

+0

Cóż, tak, są: dzień i godziny są inne: oczywiście, gdy jest 4 nad ranem w Rosji 28 września, to jest 12 na 27 w innym miejscu (na pewno w zachodniej części Ziemi) ... ale co to jest Dziwne, że minuty/sek nie powinny się zmieniać – Kek

Odpowiedz

3

Najbardziej oczywistym wyjaśnieniem jest to, że wartości DateTime są w rzeczywistości różne.

Kod jesteś połączony wykorzystuje GetCallingAssembly, a należy pamiętać, że MSDN says że:

Jeśli metoda, która wywołuje metodę GetCallingAssembly rozpręża inline przez just-in-time (JIT) kompilator, czy jego rozmówca jest rozszerzona inline, zespół, który jest zwracany przez GetCallingAssembly może różnić się niespodziewanie

W tym celu debugowania, chciałbym zacząć od wyświetlania time.Ticks i time.Kind: jeśli są one identyczne, wiesz, że to problem wyświetlacza. Jeśli są różne, musisz sprawdzić, w jaki sposób generujesz wartość czasu.

+0

Tak, to wszystko. Kod wywołujący funkcję odczytującą znacznik czasu znajdował się wewnątrz .aspx, który jest prekompilowany podczas faktycznego wdrażania. Tak więc w zależności od tego, czy wywołanie jest zainicjowane, będzie to albo czas kompilacji, albo czas prekompilacji ASP.NET. – sharptooth

+0

Oto sposób wyłączania wprowadzania konkretnej funkcji: http://stackoverflow.com/a/5169272/57428 – sharptooth

Powiązane problemy