私は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から
AESTは現在UTC + 11であり、UTC + 10ではありません。私たちは夏時間にいます。 'TimeZoneInfo.FindSystemTimeZoneById(" AUS Eastern Standard Time ")。IsDaylightSavingTime(DateTime.UtcNow)' – Rob
@Rob実際にAESTは常にUTC + 10です。オーストラリアは現在、AEDTではなくAEDTです。 – zerkms
@zerkmsあなたは正しいです - それは私が見落とした区別です。しかし、「AUS東部標準時」は、内部的に「DaylightName」と「StandardName」と同じゾーンにマップされます – Rob