6

タイムゾーンを文字列として日時値を受け入れるプロセスがあります(データはシステム外から取得されます)。この日時を、ローカル マシンのタイムゾーンでの時刻に変換する必要があります。

コード例:

string cetId = "Central European Standard Time";
if (timeZone == "CET")
{
    TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId);
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cetZone, TimeZoneInfo.Local);
}
else if (timeZone == "CEST")
{
    TimeZoneInfo cestZone = TimeZoneInfo.FindSystemTimeZoneById(cetId);
    returnDateTime = TimeZoneInfo.ConvertTime(statusDateTime, cestZone, TimeZoneInfo.Local);
}

時間が CET (中央ヨーロッパ時間) ではなく CEST (中央ヨーロッパ夏時間) である場合、または .net TimeZoneInfo オブジェクトがそのシナリオを処理する場合、何か特別なことをする必要がありますか?

4

3 に答える 3

1

あなたは大丈夫なはずです。

ConvertTime に、両方のタイム ゾーン (ソースとターゲット) が何であるかを伝えています。

これに特定の問題がありますか、それとも確認を求めているだけですか?

于 2013-03-28T17:25:00.900 に答える
0

これらの種類の変換をカプセル化するために、しばらく前にライブラリを作成しました。

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/UtcTimeZone.cs

あなたにとって役立つかもしれませんし、コードを再確認するためにそれを選びたいだけかもしれません。それがカプセル化するものの 1 つは @Brian の警告です。そのため、.Kind プロパティに関連する明示的なメソッド名があり、.Kind が間違っている場合に有用な例外をスローします。また、便利な/一般的な/夏時間の名前と略語を取得するための面倒な作業も少し必要です。

https://github.com/b9chris/TimeZoneInfoLib.Net/blob/master/TimeZoneInfoLib/TimeZone/TimeZoneShortNameMap.cs

于 2013-03-28T18:54:37.173 に答える
0

TimeZoneInfo.ConvertTime()から

The value of the Kind property of the dateTime parameter must correspond to the sourceTimeZone parameter, as the following table shows.

StatusDateTime の「Kind」プロパティに注意する必要があることを追加したいだけです。あなたの場合、それは「未指定」でなければなりません。「備考」欄をご確認ください

于 2013-03-28T17:46:45.457 に答える