0

これについて多くの質問があることは知っていますが、まだ混乱しています!

UTC から EDT に変換する方法を教えてください。つまり、EST (特にニューヨーク) へですが、サマータイムはありますか?

私はこれを試しています:

TimeZoneInfo edtZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime utcDT = UnixTimeStampToDateTime(double.Parse(fields[0]));
utcDT.Kind = DateTimeKind.Utc; //THIS LINE IS WRONG
DateTime edtDT = TimeZoneInfo.ConvertTimeFromUtc(utcDT, edtZone);


//Put in for as requested
        public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
        {
            // Unix timestamp is seconds past epoch
            System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime();
            return dtDateTime;
        }

ありがとう

4

1 に答える 1

3

あなたのUnixTimeStampToDateTime方法は間違っていると思います。Unix エポックからの秒数がかかっていると仮定すると、すでにを含む を返す必要があります。DateTimeKindUtc

private static readonly DateTime UnixEpoch = 
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static DateTime UnixTimeStampToDateTime(double secondsSinceUnixEpoch)
{
    return UnixEpoch.AddSeconds(secondsSinceUnixEpoch);
}

編集: 既存の実装を確認できるようになりました - はい、不適切です。Unspecified値を作成してから値に変換する理由はありませんLocal。上記を使用しても問題なく、一般的にはより便利です。システム ローカル値を必要とする既存の呼び出しToLocalTimeは、 の結果に対して呼び出す必要がありUnixTimeStampToDateTimeます。

(または、を取得するために使用できる私のNoda Timeプロジェクトを使用してから、必要なことを行います...)Instant.FromSecondsSinceUnixEpochInstant

于 2013-08-05T15:10:25.407 に答える