私がやりたいことは非常に簡単です:
private static TimeZoneInfo Tzi = // ... custom timeZone I've set;
public static DateTime ToTimeZone(DateTime dateTime, TimeZoneInfo target)
{
return TimeZoneInfo.ConvertTime(dateTime, Tzi, target);
}
アイデアは-サーバーに来るすべての日付は自動的に特定のタイムゾーンに変換され、そのようにDBに保存されます(UTC、米国中部、米国太平洋など)。
サーバーに設定されたタイムゾーンがTziと同じである限り、これは非常にうまく機能します。ただし、そうでない場合、変換は失敗します。DateTime インスタンスを作成すると、.NET はそれをマシンの TimeZone に設定し、TimeZoneInfo.ConvertTime(dateTime, Tzi, target) は私の要求をファンキーな方法で処理します。たとえば、サーバーのタイムゾーンが太平洋 (UTC -8) で、Tzi を中央 (UTC -6) に設定し、シンガポール (UTC +8) をターゲットにするとします。
TimeZoneInfo.ConvertTime(dateTime, Tzi, target) を呼び出すと、最初に dateTime を UTC -8 から UTC -6 (Tzi タイム ゾーン) に「変換」し、2 時間を追加してから、Tzi からターゲットにします。
TimeZoneInfo.ConvertTime に、送信している dateTime がサーバーの TimeZone ではなく、パラメーターから渡されている TimeZone にあることを通知する方法はありますか?
編集: OK、どちらの回答も素晴らしい推奨事項ですが、私は別の種類の問題を抱えているようです。TimeZoneInfo.ConvertTime(dateTime, Tzi, target) は正しく動作しているようで、実際の原因は次のとおりです。
return Json(new {data}, JsonRequestBehavior.AllowGet);
"Created":"/Date(1346810072950)/" のような日付を出力します。サーバーのTimeZoneによって送信日が異なることを確認しました(サーバーのTimeZone変更後はAppPoolの再起動が必要です)。ASP.NET MVC がクライアントに送り返される JSON で日付を出力する方法に影響を与える方法について、これと提案の経験がある人はいますか?