2

アプリケーションはローカルホストで実行されています。サーバーはクライアントより 1 時間早いです。

クライアント送信時刻:Sat Apr 25 2015 00:00:00 GMT-0400 (Eastern Daylight Time)

ここに画像の説明を入力

リクエストが送信されます: dateOfArrival: "2015-04-25T04:00:00.000Z"

ここに画像の説明を入力

サーバーが受信する時刻:{4/24/2015 11:00:00 PM}

ここに画像の説明を入力

との間に 1 時間の差があるのはなぜですか? どうすれば対処できますか? どういうわけか夏時間と標準時間に関連していると推測できます。

このコードを試すと:

string dateStr = "2015-04-25T04:00:00.000Z";  
var myDate = DateTime.Parse(dateStr);  // it gives me myDate = {4/25/2015 12:00:00 AM}

実際、私は時間の一部だけに興味があります。私のデータベースでは、日付型として保持しています。でも、この時差のせいで、私の日は一日早くなってしまいます。

問題を処理するためにさまざまな方法を試しましたが、日時変換の世界で完全に迷子になりました! 私は localhost アプリケーションで迷っていましたが、実際のサーバーで何が起こるか想像できませんでした。

このQ&Aでも同様の問題が言及されていると 思いますが、それが重要かどうかはわかりません:

私のタイムゾーン: 東部標準時 (UTC-05:00)

Web API odata jsonシリアライザーについて、この投稿から、これ以外のものと言えます

ここに私のサーバーコードがあります:

// PATCH: odata/IncomingStudents(5)
[AcceptVerbs("PATCH", "MERGE")]
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<IncomingStudent> patch)
{
    Validate(patch.GetEntity());
    var dateOfArrival = patch.GetEntity().DateOfArrival
... 
}

クライアントはAngularjsでhttpパッチリクエストを送信しています

4

3 に答える 3

1

クライアントとサーバー間のタイムゾーンの違い (または同じマシン内での構成の違い) を避けるために、転送とデータベースへの保存に UTC を使用することをお勧めします。

つまり、サーバー側ではDateTime.ToUniversalTime()、日付を調整したりDateTime.UtcNow、現在の日付と時刻を取得したりする必要がある場合があります。

javascript から、日付の処理を容易にするためにmoment.jsを使用することをお勧めします。

moment.js を使用すると、次の方法で UTC の値を取得できます。

var localDate = new Date();
var inUtc = moment(localDate).utc();

ユーザーのローカル オフセットでユーザーに情報を表示しますが、常にサーバーに送信し、UTC を使用して受信します。

于 2015-04-26T02:24:47.600 に答える
1

謎が解けました:

db の dateOfArrival の値は次のとおりです: 2015-04-25 (日付のみ)
サーバーはその値を取得します: 2015-04-24T23:00:00-05:00

クライアントで、新しい Date(dateOfArrival) は 2015-04-25T04:00:00.000Z を与え
、この値をサーバーに送信し、サーバーはそれを 4/24/2015 11:00:00 PM にします

サーバーは同じ値を受け取ります。

この投稿に記載されているように、日付が 2015 年1 月 1 日などの夏時間の範囲内にない場合、すべての日付は同じになります。

一方、Web api odata を使用すると、DateTimeOffset のみが機能し、DateTime は機能しないため、このタイムゾーンの問題が発生すると思います

于 2015-05-01T22:31:30.207 に答える
0

The Server code runs as in the user context of user in APP Pool.
The java script in clients browsers determines the timezone there.

These timezones may be different.

于 2015-04-26T00:02:07.917 に答える