2016-06-23 6 views
0

私はこのコードのスウェーデン語のタイムゾーンに変換しようとしています:タイムゾーン変換エラーを解決するには?

を指定されたDateTime がなかったため、{ "変換が完了することができませんでした:私は取得していますいくつかの理由について

Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); 
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTime currentDate = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); 


var swedishTime = TimeZoneInfo.ConvertTime(currentDate, cet, TimeZoneInfo.Local); 

たとえば、 KindプロパティがDateTimeKind.Localの場合、ソースタイムゾーンは TimeZoneInfo.Localでなければなりません。パラメータ名:sourceTimeZone "}

何が欠けていますか?

+0

適切なタイプ、のDateTimeOffsetを使用します。 'DateTimeKind.UTC'に設定されていても、' DateTime'だけで変換エラーを回避することはできません。例えばローカル? - 何? Webアプリケーション、サーバー、またはブラウザ? –

答えて

2

いくつかのこと:文字列から/への変換時

  • 文化は、唯一のフォーマット出力に影響を及ぼします。タイムゾーンの変換には影響しませんので、ここでは不要です。

  • WindowsのTimeZoneInfoで使用されるタイムゾーン識別子は、Windowsオペレーティングシステム自体に由来し、時にはそれらの名前が予想通りに一致しないことがあります。

    • あなたは"(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb"の表示名を持つWindowsタイムゾーンID "Central European Standard Time"を、使用しています。
    • スウェーデンのために、あなたが実際にあなたがthe timezone tag wikiの「Microsoft Windowsタイムゾーンデータベース」をというタイトルのセクションではこれについての詳細を読むことができ"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
    • の表示名を持つID "W. Europe Standard Time"を、使用する必要があります。
  • 特定のタイムゾーンで現在の時刻を探しているように見えるので、ローカルタイムゾーンをまったく参照しないでください。 UTCからターゲットタイムゾーンに直接変換するだけです。

コードは単純に次のようになります。

var tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); 
var swedishTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz); 

それとも好むなら、あなたは便利なメソッドを使用することができます

var swedishTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, 
                   "W. Europe Standard Time") 
2

"var swedishTime"から "TimeZoneInfo.Local"を削除するだけです。

Thread.CurrentThread.CurrentCulture = new CultureInfo("sv-SE"); 
TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTime currentDate = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); 


var swedishTime = TimeZoneInfo.ConvertTime(currentDate, cet); 
関連する問題