1

学生クラスには、誕生日というプロパティがあります。私の Web サーバーは北京 (UTC+8) にあり、JSON 形式でサーバーからデータを取得すると、誕生日プロパティは常に元の日付から 8 時間短縮されます。これを修正するにはどうすればよいですか? 私も北京にいて、すべての誕生日のプロパティに 8 時間を追加しますが、別のタイムゾーンにいる場合、または Web サーバーが北京にない場合は、他の時間を手動で追加する必要があります。

Web サーバーでは、私のコードは次のとおりです。

    return Json(student);

データを取得するコード:

  var studentReader= new StreamReader(Request.InputStream);
  var student= JsonHelper.FromJson<Student>(studentReader.ReadToEnd());

JsonHelper クラス:

   public static T FromJson<T>(this string json)
    {
     return JsonConvert.DeserializeObject<T>(json);
    }
4

2 に答える 2

0

JSON のシリアル化は問題ありません。問題ありません。

すべての日時値を UTC として保存する必要があります。日付を表示すると、必要なタイムゾーンに変換できます。

これが私が通常行う方法です:

  • DateTime を保存するたびに、DateTime.ToUniversalTime() を使用して、日付がデータベースの UTC に保存されていることを確認します。
  • ビューで日付を印刷する必要がある場合、特定の TimeZone を取得して日付を変換するメソッドを使用しました。コード例については、以下を参照してください。
  • クライアント側のゾーンに依存することはありません。私が作成した多くの地理的ポイントからの幅広いユーザーがいる場合は、好みのタイムゾーンを選択し、この情報をプロファイルに保存します (Google、Microsoft、および 37Signals はすべて、いくつかの例を挙げると、Web アプリケーションに対してこれを行います)。

    public static DateTime ToLocalTimeZone(this object date)
    {        
        DateTime dt;
    
        if (!DateTime.TryParse(date.ToString(), out dt))
            return DateTime.UtcNow;
    
        //Timezone string. This can be stored on web.config
        //or on the user profile as well
        var timeZone = "Pacific SA Standard Time"; 
    
        var defaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZone);
        var userTime = TimeZoneInfo.ConvertTimeFromUtc(dt, defaultTimeZone);
    
        return userTime;
    }
    

以前の質問の詳細については、こちらこちらをご覧ください

編集: 許可されたタイムゾーン文字列のリストはこちら

于 2013-05-26T15:54:56.733 に答える