2

以下の関数は、次のUNIX時間をC#DateTimeオブジェクトに変換することになっています。

1362506086000

上記の時間は、2012年3月5日12:54PMを表すことになっています。

ただし、以下の関数を実行するたびに、午後5時54分に変更されます。

2013年3月5日17:54:46

    static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;

    public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
    {
        return unixTimeStamp > MaxUnixSeconds
           ? UnixEpoch.AddMilliseconds(unixTimeStamp)
           : UnixEpoch.AddSeconds(unixTimeStamp);
    }

UNIX時間を5:54ではなく12:54として適切に表すにはどうすればよいですか?

4

2 に答える 2

2

タイムゾーンの問題のようです。Unix 時間の生成に使用されるタイムゾーンが Windows システムのタイムゾーンと同じであることを確認するか、それに応じて変換してください。

于 2013-03-05T18:43:10.513 に答える
0

私にとっての修正は、ToLocalTime()次のようにコードに追加することでした。

static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double MaxUnixSeconds = (DateTime.MaxValue - UnixEpoch).TotalSeconds;

public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
    return unixTimeStamp > MaxUnixSeconds
       ? UnixEpoch.AddMilliseconds(unixTimeStamp).ToLocalTime()
       : UnixEpoch.AddSeconds(unixTimeStamp).ToLocalTime();
}
于 2013-03-05T19:20:18.897 に答える