2012-01-10 2 views
2

私は、DateTimeオブジェクトを、GMT時間に設定されたOS上のすべての適切なプロパティを取得する方法があるかどうかを調べようとしています。時間を変えるだけではありません。GMT/UTC時間のマシンでDateTime.IsDaylightSavingTimeを動作させる方法はありますか?

DateTime f = new DateTime(2012, 8, 1); //A date on summer 

DateTime f2 = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(f, TimeZoneInfo.Local.Id, "Central Europe Standard Time"); 

var isSummer = f2.IsDaylightSavingTime(); //It always returns false if the OS is on GMT 

そしてそれは、GMTがうまく、しかしIsDaylightSavingTime機能文句を言わない作業中央ヨーロッパ標準時になるように1時間&日付を変更します。

は今何イムがやってすることです。システムでGMTを使用しているため、常にfalseが返されますが、私は中央ヨーロッパ向けにDateTimeを作成したので、そうしてはいけないと思います。

DateTimeオブジェクトを実際にローカルにする方法はありますか?その8月がヨーロッパ中央であれば、falseの代わりにtrueを返さなければならないことを理解してください。

マシンでローカル時間を使用すると問題なく動作しますが、サーバーでGMT時間を変更することはできません。私は愛するが、私は傾ける。 :-)

+0

のTimeZoneInfo方法をIsDayLightSavingTime使用している場合、検証したい場合は

は、私は、8月程度ではない心配イムを明確にしたい私時間を変更する正確な日であるかどうかを知るための自分の関数です。そして、それでも、使用しているデータが異なる時間帯のフライトであるため、場所によって異なります。 – H27studio

+0

関連:http://stackoverflow.com/q/2532729/1583 – Oded

答えて

7

種類ローカルまたは指定されていない、および日時のこのインスタンスの値、すなわち、現在のタイムゾーンの夏時間範囲内

ある場合DateTime.IsDayLightSavingTimeがtrueを返しますUTCは夏時間をサポートしていないため、DateTimeオブジェクトはシステムタイムゾーンでチェックし、trueを返します。あなたはタイムゾーンの夏時間の時間指定秋、そしてもちろん

DateTime f = new DateTime(2012, 8, 1); //A date on summer 
TimeZoneInfo tzf2=TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time"); 
DateTime f2 = TimeZoneInfo.ConvertTime(f, tzf2); 
var isSummer = tzf2.IsDaylightSavingTime(f2); 
+4

申し訳ありませんが、DLSTimeの場合、tzf2.IsDaylightSavingTime(f2)を使用して検証する必要があります。 – Manas

+1

答えが間違っている場合は編集してください。 –

関連する問題