24

私が使用するとき、私DateTime.Nowはサーバーの観点から日付と時刻を取得します。ASP.NETでクライアントの日付と時刻を取得する方法はありますか?

4

6 に答える 6

17

ブラウザ/システムの時間とタイムゾーンを使用するか、タイムゾーンを選択できるようにするというアイデアが気に入っています。過去のプロジェクトでは、次のようなものを使用しました。

<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>

そして、サーバー上で:

/// <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;
}

または、URL パラメーターとして渡して、Page_Load で処理することもできます。

http://host/page.aspx?tz=-360

すべてのタイムゾーンが完全な時間であるとは限らないため、分を使用することを忘れないでください。

于 2008-11-08T17:51:10.967 に答える
12

私がしたいことは、非表示の入力フィールドを作成し、Javascript ルーチンをフォームの onsubmit イベントに接続することです。このルーチンは、非表示フィールドにクライアント マシンの時刻を入力します。

隠しフィールドは、HTML コントロールの "HtmlInputHidden" クラスを使用して ASP.NET で使用できます。他のサーバー側コントロールと同様に、入力コントロールに runat="server" 属性を与えるだけです。

サーバーは、フォームがポストバックするときにこの時間を読み取ることができます。複数の場所でこれを行う必要がある場合は、これをサーバー コントロールにまとめることもできます。

または、AJAX を使用してこれを行うこともできますが、実装は使用するライブラリによって異なります。

于 2008-11-08T16:11:07.237 に答える
5

ユーザープロファイルを維持している場合は、タイムゾーンを教えてもらい、必要な計算を行うことができます。

于 2008-11-08T15:28:10.223 に答える
0

もう 1 つの方法は、ユーザーの IP アドレスに基づいてユーザーの位置を特定することです。または、ブラウザにこの機能がある場合はジオロケートします (Firefox では近日公開予定)。ユーザーの場所を取得したら、タイムゾーンを検索できます。

JavaScript ソリューションは、おそらく適切で簡単なものです。

于 2008-11-08T15:30:03.433 に答える
0

クライアントとサーバーは完全に同期されていない可能性があるため、問題は、クライアント コンピューターの時刻が必要なのか、それともサーバーの時刻が必要であるがタイム ゾーンの違いを調整したいのかということです。Javascript を使用すると、クライアントの時刻 (タイムゾーンを含む) を取得できます。サーバーの時刻とクライアントのタイムゾーンを組み合わせることもできます。

ただし、リクエストのレイテンシよりも高い精度で時間を取得することはできません。

于 2008-11-08T15:35:33.423 に答える
-5

私はVBでASP.Netでこのメソッドを使用しました

Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern

これにより、データを見ているコンピューターのデータ時間形式が得られます。

于 2012-06-27T18:18:30.687 に答える