2012-12-26 5 views
5

Przy projektowaniu aplikacji internetowych, zwłaszcza przy użyciu Asp.net MVC4 C#, gdy używamKtóra pora DateTime.Now naprawdę dostaje się do aplikacji internetowych?

private DateTime currentDateTime = DateTime.Now; 

gdzieś w moim kodu i zaoszczędzić CurrentDateTime w bazie danych; a następnie wdrażam moją aplikację w sieci,

Jaka będzie wartość currentDateTime?

a. DateTime przeglądarki/komputera, który otworzył moją aplikację (problem strefy czasowej)

b. DateTime serwera, na którym wdrożyłem moją aplikację (wszystkie wartości znajdują się w jednym obszarze czasowym)

Przepraszam, ale dopiero zaczynam w aplikacjach internetowych, więc ten jeden mnie myli. Mam nadzieję, że możesz mi to wyjaśnić. Dzięki.

Odpowiedz

7

Wartość będzie podawana w czasie lokalnym na serwerze.

Jednakże, zdecydowanie zaleca się zastosowanie Universal Coordinated Time (UTC), np. DateTime.UtcNow, sprawia, że ​​rozumowanie na temat dat jest o wiele prostsze i będzie oznaczało, że będziesz w stanie hostować aplikację w dowolnym miejscu na świecie bez negatywnych skutków.

+0

Doskonała porada. Pamiętaj, że będzie to wymagało wprowadzenia odpowiednich informacji o czasie i strefie czasowej na serwerach. (To pochodzi od głosu doświadczenia. Musiałem debugować problem po stronie serwera, aby odkryć, że później ścigaliśmy niewłaściwy problem - ponieważ czas zarejestrowany dla różnych zdarzeń był nieprawidłowy). –

6

Kod ASP.Net jest wykonywany na serwerze, więc będzie to czas serwera.

2

To będzie czas na serwerze.

4

Prawidłowa odpowiedź to:

b. DateTime serwera, na którym wdrożyłem moją aplikację, ponieważ tam wykonywany jest kod.

Istnieje inna właściwość DateTime, DateTime.UtcNow, która zawsze pobiera czas UTC.
Polecam używanie tego zarówno w aplikacji, jak iw bazie danych (na przykład getutcdate() w serwerze sql), ponieważ pozwala uniknąć wszelkiego rodzaju problemów z synchronizacją.

Jeśli chcesz pokazać datę klientowi, wystarczy przesunąć zapisany czas według strefy czasowej klienta, a Ty jesteś złoty.

4

To będzie czas na serwerze, ponieważ tam właśnie wykonywany jest kod.

Zamiast tego możesz użyć DateTime.UtcNow, ponieważ zmniejsza to problemy strefy czasowej. Możesz łatwo przekonwertować na czas lokalny na kliencie lub serwerze, gdy przejdziesz do wyświetlenia lub oceny czasu.