Wenn ich die DateTime.Now
Ich erhalte das Datum und die Uhrzeit aus der Sicht des Servers. Gibt es eine Möglichkeit, die Kunde Datum und Uhrzeit in ASP.NET?
Antworten
Zu viele Anzeigen?Mir gefällt die Idee, entweder die Browser-/Systemzeit und die Zeitzone zu verwenden oder sie ihre Zeitzone wählen zu lassen. In einem früheren Projekt habe ich etwas Ähnliches verwendet:
<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>
Und dann auf dem Server:
/// <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;
}
Oder Sie können ihn als URL-Parameter übergeben und ihn im Page_Load behandeln:
http://host/page.aspx?tz=-360
Denken Sie nur daran, Minuten zu verwenden, da nicht alle Zeitzonen ganze Stunden haben.
Was ich tun würde, ist ein verstecktes Eingabefeld zu erstellen und dann Draht eine Javascript-Routine auf das onsubmit Ereignis für das Formular. Diese Routine würde das versteckte Feld mit der Zeit auf dem Client-Rechner auffüllen.
Das verborgene Feld kann mit ASP.NET verwendet werden, indem die HTML-Steuerelementklasse "HtmlInputHidden" verwendet wird. Sie geben dem Eingabe-Steuerelement einfach ein runat="server"-Attribut wie jedem anderen serverseitigen Steuerelement.
Der Server kann diese Zeit dann auslesen, wenn das Formular zurückkommt. Sie könnten dies sogar in ein Server-Steuerelement verpacken, wenn Sie dies an mehreren Stellen tun müssen.
Alternativ können Sie dies auch mit AJAX tun, aber die Implementierung hängt davon ab, welche Bibliothek Sie verwenden.
Die Alternative ist die Geolokalisierung des Nutzers auf der Grundlage seiner IP-Adresse. Oder geolokalisieren, wenn der Browser diese Fähigkeit hat (demnächst für Firefox). Sobald Sie den Standort des Nutzers haben, können Sie die Zeitzone nachschlagen.
Die Javascript-Lösung ist wahrscheinlich eine gute und einfache Lösung.
Client und Server sind möglicherweise nicht vollständig synchronisiert, so dass sich die Frage stellt, ob Sie die Zeit auf dem Client-Computer oder die Zeit auf dem Server, aber angepasst an Zeitzonenunterschiede, benötigen. Mit Javascript können Sie die Zeit auf dem Client ermitteln (einschließlich Zeitzone). Sie können auch die Zeit auf dem Server mit der Zeitzone des Clients kombinieren.
Allerdings kann man die Zeit nie genauer bestimmen als die Latenzzeit einer Anfrage.
- See previous answers
- Weitere Antworten anzeigen