9

私は UTC から山岳時間に変換する方法を探し回っていましたが、誰もが DST を考慮に入れていると言う次の関数を見つけることに成功しました。UTC から Mountain に変換するときはいつでも、オフセットは常に -7 です (現在は -6 であるべきですが)。そうではないように見えることを除いて。誰かが私のためにこれに光を当てることができますか、またはDSTを考慮に入れる方法はありますか?

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc);
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time");

ありがとう、ディーマン

4

2 に答える 2

15

.NET には (少なくとも Windows 8 のインストールでは) 山岳時間である 2 つのゾーンがあるようです。

あなたが使用していて、DST を観察しない「米国山岳部標準時」(アリゾナの場合) と、DST を観察する単純な「山岳部標準時」があります。したがって、「US」の部分を取り除くだけで機能します。

using System;

class Test
{
    static void Main()
    {
        DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc);
        DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc);
        ConvertToMountainTime(octoberUtc);
        ConvertToMountainTime(decemberUtc);
    }

    static void ConvertToMountainTime(DateTime utc)
    {
        DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId
            (utc, "Mountain Standard Time");

        Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain);
    }
}

出力 (英国文化):

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time
于 2012-10-31T20:35:27.947 に答える
1

山岳部標準時はまだ-7です。一般的な信念に反して、私たちは時間を変更しませんが、タイムゾーンを変更します。現在のタイムゾーンは、実際には山岳部夏時間です。タイムゾーン情報を把握することは....不快です

于 2012-10-31T20:31:54.353 に答える