2016-09-30 8 views
1

私は、複数のユーザーと他のシステムが複数のタイムゾーンにわたって使用するシステムを持っています。私はAzureでそれを主催しています。私はすべての日付をサーバー時間ではなく現地時間で保存したいと思います。私は各顧客のローカルタイムゾーンを追跡することでこれを行うことができ、データベースに保存する前に日付を相殺しています。MVCのタイムゾーンの日付変換を妨げる

これまでのところすべてがうまくいきましたが、クライアントのブラウザに日付が返されると、MVCはそれらがUTC(すべてのAzure VMのサーバー時間)であると判断し、時間をオフセットします。

これを防ぐ最も効率的な方法は何ですか?私はDateTimeKindをローカルに設定しようとしましたが、これは望みの効果がありませんでした。日付はまだ変換されています。私は文字列として日付を渡すことができると思うが、これはハックのように思える。これを行うにはより良い方法が必要です。

あなたの提案は高く評価されます。

+0

クライアントがタイムゾーンを事前に知っている場合は、UTCに変換してローカル日付を保存し、情報を表示する必要があるときに特定のロケールに変換すると、スケーラビリティと調整が容易になります。すべてが1つのタイムゾーンサーバー側に同期されていると、日付の計算が簡単になります。 –

+0

datetimekindをutcに設定するとどうなりますか? – JamieD77

+0

@ JamieD77。私はそれを試みたが効果はなかった。何らかの理由で日付が常に変換されます。 – dpdragnev

答えて

1

私は検索とテストの数日後、問題を解決するソリューションを考え出しました。サーバー上で

public JsonResult GetModel() 
 
{ 
 
    EOListModel model = _repo.Getmodel(); 
 
    return Json(JsonConvert.SerializeObject(model)); 
 
}

ここでのポイントのカップル: - メソッド化するJsonResult を返します - 私たちは、クライアントではJSON文字列

にモデルをシリアライズ:

$.ajax({ 
 
    type: "POST", 
 
    url: "/Controller/GetModel", 
 
    data: null 
 
    }).done(function (result) { 
 
    var m = JSON.parse(result); 
 
    ... 
 
});

結果は、あなたのJSON文字列になり、解析した後、あなたは、日付とあなたのオブジェクトをそのまま取得します。

私はこれを達成するための最良の方法ですが、効果があり、コードの変更は最小限に抑えられています。

ありがとうございました。

EDIT:あなたはまた、タイムゾーンを追加しないJSON.NETを指示する必要があり、サーバの方法で

return Json(JsonConvert.SerializeObject(model, new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Unspecified }));

そうでない場合のJavascriptやモーメントが変換されます日付。詳細は、http://www.newtonsoft.com/json/help/html/SerializeDateTimeZoneHandling.htmを参照してください。

関連する問題