2016-11-17 2 views
1

私はDateTimeオブジェクトの作成に使用しています太平洋標準時の時刻を表す文字列を変換します。それを使用してTimeZoneInfo.ConvertTime - 1時間ずれ

var pacificDateTime = new DateTime(2016, 11, 16, 15, 0, 0) // 11/16/2016 3:00:00 PM 

を、I DateTimeOffsetを作成してください。これは最終的には作業が少し楽になるためです。

var pacificTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 
var dateTimeNoKind = new DateTime(pacificDateTime.Ticks, DateTimeKind.Unspecified) 
var DateTimeOffsetValue = TimeZoneInfo.ConverTimeToUtc(dateTimeNoKind, pacificTimeZoneInfo) // 11/16/2016 11:00:00 PM 

これまでのところとても良いです。 UTCと太平洋の違いは、UTCが8時間先にあることです(指定された時間は夏時間の範囲内です)。

それから私は、UTCからに変換したいAEST-が、問題が表示された場所です。

var australianEasternTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time"); 
TimeZoneInfo.ConvertTime(DateTimeOffsetValue, australianEasternTimeZoneInfo) // 11/17/2016 10:00:00 AM 

AESTは、10時間で先にUTCのです。私は値が11/17/2016 09:00:00 AMであると予想していましたが、代わりに私の結果に余分な時間が追加されています。

テストとして、UTC時刻からPSTまたはGMTまたはESTに変換すると、正しく変換されているように見えます。

私は何かが分かりにくいか、何か単純なものを見落としているような気がしますか? WikipediaのTime in Australia articleから

+0

AESTは現在UTC + 11であり、UTC + 10ではありません。私たちは夏時間にいます。 'TimeZoneInfo.FindSystemTimeZoneById(" AUS Eastern Standard Time ")。IsDaylightSavingTime(DateTime.UtcNow)' – Rob

+1

@Rob実際にAESTは常にUTC + 10です。オーストラリアは現在、AEDTではなくAEDTです。 – zerkms

+1

@zerkmsあなたは正しいです - それは私が見落とした区別です。しかし、「AUS東部標準時」は、内部的に「DaylightName」と「StandardName」と同じゾーンにマップされます – Rob

答えて

4

Australian Time Zones

オーストラリアは2本の東部時間帯があります。北東では、UTC + 10が一年中適用されます。南東部では、標準時にUTC + 10が適用され、夏時間にはUTC + 11が適用されます。

南東部(クイーンズランド州)はIANAタイムゾーン識別子"Australia/Brisbane"を使用し、南東部(ニューサウスウェールズ州)は"Australia/Sydney"を使用します。これらのWindowsのタイムゾーン識別子は、それぞれcorrespond"E. Australia Standard Time""AUS Eastern Standard Time"です。

  • クイーンズランド州に変換する場合は、"E. Australia Standard Time"を使用してください。

  • ニューサウスウェールズ州に変換する場合は、"AUS Eastern Standard Time"を使用してください。これらの識別子の混乱性質として

the timezone tag wikiで、Windowsのタイムゾーンに関するセクションを参照してください。

代わりに標準IANA識別子を使用する場合は、Noda Timeを使用してください。

関連する問題