Podczas korzystania z DateTime.Now
otrzymuję datę i godzinę z punktu widzenia serwera. Czy istnieje sposób, aby uzyskać klienta datę i godzinę w ASP.NET?Jak uzyskać datę i godzinę klienta w środowisku ASP.NET?
Odpowiedz
Co mogę zrobić, to utworzyć ukryte pole wejściowe, a następnie podłączyć procedurę JavaScript do zdarzenia onsubmit dla formularza. Ta procedura zapełni pole ukryte czasem na komputerze klienta.
Ukryte pole może być używane z ASP.NET przy użyciu kontrolki HTML "HtmlInputHidden" klasy. Po prostu dajesz kontrolę wejściową atrybutu runat = "server", jak każdy inny kontroler po stronie serwera.
Serwer może następnie odczytać ten czas, gdy formularz zostanie odesłany. Możesz nawet zawinąć to w kontrolę serwera, jeśli musisz to zrobić w wielu miejscach.
Alternatywnie można to zrobić w AJAX, ale implementacja będzie zależała od używanej biblioteki.
Zamiast robić to wszystko, wystarczy użyć Javascript, aby ustawić plik cookie, przechowując strefę czasową przeglądarki. Wtedy serwer może przeczytać to ciasteczko kiedykolwiek. –
Problem z plikiem cookie polega na tym, że ludzie podróżują. –
Jeśli utrzymujesz profil użytkownika, możesz poprosić go o wskazanie strefy czasowej, a następnie wykonać niezbędne obliczenia.
Alternatywą jest geolokalizacja użytkownika na podstawie jego/jej adresu IP. Lub geolokacja, jeśli przeglądarka ma taką możliwość (już wkrótce w Firefoksie). Po znalezieniu lokalizacji użytkownika możesz sprawdzić strefę czasową.
Rozwiązanie javascript jest prawdopodobnie dobrym i łatwym rozwiązaniem.
Adres IP niekoniecznie musi zawierać poprawną odpowiedź. Mam klienta, który korzysta z pojedynczej witryny dla wszystkich połączeń sieciowych (bezpośrednie przesyłanie z jednej witryny do drugiej), więc wszystkie pochodzą z CST IP, niezależnie od tego, gdzie faktycznie się znajdują. –
Stephen: Robimy biznes, aby ukryć adresy IP klientów, więc VPN-in jest w Pradze, a proxy-out w Berlinie. A klienci są na przykład w Moskwie. – abatishchev
Klient i serwer mogą nie być w pełni zsynchronizowane, więc pytanie brzmi, czy chcesz mieć czas na komputerze klienckim, czy chcesz mieć czas na serwerze, ale dostosować go do różnic strefy czasowej. JavaScript może dać ci czas na kliencie (w tym strefie czasowej). Możesz także połączyć czas na serwerze ze strefą czasową klienta.
Jednak nigdy nie można uzyskać czasu z większą precyzją niż czas opóźnienia żądania.
Podoba mi się pomysł korzystania z przeglądarki/czasu systemowego i strefy czasowej lub pozwalania im wybrać swoją strefę czasową. W poprzednim projekcie Kiedyś coś takiego:
<script language="javascript">
function checkClientTimeZone()
{
// Set the client time zone
var dt = new Date();
SetCookieCrumb("ClientDateTime", dt.toString());
var tz = -dt.getTimezoneOffset();
SetCookieCrumb("ClientTimeZone", tz.toString());
// Expire in one year
dt.setYear(dt.getYear() + 1);
SetCookieCrumb("expires", dt.toUTCString());
}
// Attach to the document onload event
checkClientTimeZone();
</script>
a następnie na serwerze:
/// <summary>
/// Returns the client (if available in cookie) or server timezone.
/// </summary>
public static int GetTimeZoneOffset(HttpRequest Request)
{
// Default to the server time zone
TimeZone tz = TimeZone.CurrentTimeZone;
TimeSpan ts = tz.GetUtcOffset(DateTime.Now);
int result = (int) ts.TotalMinutes;
// Then check for client time zone (minutes) in a cookie
HttpCookie cookie = Request.Cookies["ClientTimeZone"];
if (cookie != null)
{
int clientTimeZone;
if (Int32.TryParse(cookie.Value, out clientTimeZone))
result = clientTimeZone;
}
return result;
}
Albo można przekazać go jako parametr URL i obsługiwać go w Page_Load:
http://host/page.aspx?tz=-360
Pamiętaj tylko, aby używać minut, ponieważ nie wszystkie strefy czasowe są całymi godzinami.
ten wiersz nie jest wyraźny Int32.TryParse (cookie.Value, out result); przechowujesz wartość cookie w zmiennej wynikowej, ale przed rozpoczęciem przechowywania całkowitej minuty do zmiennej wynikowej. niezbyt wyraźnie wyczyść rutynową funkcję GetTimeZoneOffset() po stronie serwera. jeśli to możliwe, wyjaśnij plzz. – Thomas
@Thomas Zacząłem od strefy czasowej serwera, a następnie sprawdzam, czy istnieje plik strefy czasowej klienta. Jeśli plik cookie istnieje, spróbuj przekształcić ciąg znaków w liczby całkowite. – Ryan
użyłem tej metody w ASP.Net z VB
Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern
To przyniesie format czasu dane z komputera patrząc na dane.
Witamy w StackOverflow! Proszę ponownie przeczytać to pytanie. Użytkownik chce znać czas lokalny klienta, a nie format czasu. –
- 1. Jak uzyskać datę i godzinę z serwera
- 2. Dodaj datę i godzinę
- 3. Skompiluj datę i godzinę
- 4. Jak uzyskać ostatnio dostępną datę i godzinę pliku w Go?
- 5. Jak obsługiwać datę i godzinę w PHP?
- 6. Jak określić datę i godzinę w python?
- 7. pobierz aktualną datę i godzinę
- 8. Oracle. Jak wydrukować datę i godzinę?
- 9. Javascript Porównaj datę i godzinę
- 10. Pobierz następną datę i godzinę w javascript
- 11. coraz kompilacji datę i godzinę bez makr
- 12. Pobierz datę i godzinę tagów git
- 13. Pobierz datę i godzinę z UIDatePicker iOS
- 14. Skompiluj datę i godzinę przy użyciu cmake
- 15. Jak uzyskać, aby JSON.NET przekształcił datę/godzinę do ISO 8601?
- 16. Wstaw datę i godzinę do Mysql
- 17. Jak uzyskać aktualną datę i godzinę w terminalu i ustawić niestandardowe polecenie w terminalu dla niego?
- 18. Jak wstawić bieżącą datę i godzinę w zapytaniu wstawiania postgresql
- 19. Jak wybrać datę i godzinę bez sekund w mysql?
- 20. jak utworzyć datę i godzinę z negatywnej epoki w Pythonie
- 21. Jak połączyć datę i godzinę ze znacznikiem czasu w db2?
- 22. Konwertowanie datetime UTC na lokalną datę i godzinę użytkownika
- 23. Jak uzyskać datetime lokalnego systemu użytkownika w asp.net mvc?
- 24. Jak uzyskać dzisiejszą datę w środowisku wsadowym Windows?
- 25. Jak przeanalizować datę/godzinę na łańcuchu?
- 26. Wstaw datę/godzinę do bazy danych Access
- 27. Zaplanuj pracę w urządzeniu Gearman na konkretną datę i godzinę
- 28. Jak mogę wyodrębnić datę i godzinę z tekstu swobodnego?
- 29. Jak mogę uzyskać aktualną datę i godzinę, jeśli data i godzina urządzenia są niedokładne?
- 30. Jak uzyskać godzinę, minuty i sekundy?
JavaScript może być zły, ponieważ wielu użytkowników ma nieprawidłowy czas. Co więcej, ktoś mógłby go wykorzystać. Musisz sprawdzić, czy przesunięcie do UTC jest uzasadnione, czy nie. – hangy