0

クライアントのタイムゾーンを取得したいので、以下のコードを使用しています

function filltime() 
{
        document.getElementById("hdnTime").value = new Date();
} 

変換

 Dim time As Date = DateTime.ParseExact(hdnTime.Value,
                                           "ddd MMM d HH:mm:ss UTCzzzzz yyyy",InvariantCulture)  

正確な値が得られていません。サーバー時間のみを表示します。ただしhdnTime.Value、正しい値が含まれています( "Mon Feb 18 14:46:49 UTC + 0530 2013")。問題は変換にあると思います。

何が問題ですか?どうすれば解決できますか?

4

2 に答える 2

2

DateTimeオブジェクトとその表示を混同しています

現在のタイムゾーンで日時の表現が表示されているため、サーバーの時刻が表示されるのは正常です。

あなたが得られないのは、DateTimeがどのように機能するかです...

タイムゾーン情報を使用して日時を渡すと、適切なオフセットでタイムゾーンに変換されます。

日時を渡してそのまま取得する場合は、タイムゾーンの部分を削除する必要があります。

とにかく、あなたの状況では、クライアントのタイムゾーンを知る必要があるだけなら、それを渡すだけです!

var d = new Date()
var n = d.getTimezoneOffset();

getTimezoneOffset()メソッドは、UTC時間と現地時間の時間差を分単位で返します。

たとえば、タイムゾーンがGMT + 2の場合、-120が返されます。

一般的な議論:私の経験では、文字列として変換され、異なるシステム間で渡される日時を処理する最良の方法は、ISODATE形式を使用することです。

DateTime.Now.ToString("s"); //"2013-02-18T11:17:24"
于 2013-02-18T10:04:14.610 に答える
2

日付と時刻は1つの言語では苦痛であり、2の間の値を渡す場合は言うまでもありません。

JavaScriptDate()オブジェクトをサーバーにポストバックする前にJSONにシリアル化することをお勧めします。次に、 JSON.NETDateTimeなどのライブラリを使用してC#オブジェクトに逆シリアル化します。シリアル化および逆シリアル化するときに適用できる設定に関する包括的なドキュメント(JSONでの日付のシリアル化)があります。

JavaScript

function filltime() 
{
    document.getElementById("hdnTime").value = JSON.stringify(new Date());
}

JSONはすべてのブラウザーにネイティブであるとは限らないため、手動でロードする必要があります。詳細については、以下を参照してください。ブラウザーネイティブのJSONサポート(window.JSON)

JSON.NETを使用したC#

DateTime dateTime = JsonConvert.DeserializeObject<DateTime>(hdnTime.Value);
于 2013-02-18T10:47:00.463 に答える