C# 纪元时间到日期和时区转换

C# Epoch time to date and timezone convertion

什么是将 Epoch 时间转换为日期的好方法,但要使用特定时区

我需要检查两个日期。我在数据库中有一个日期,在 x 网站中有另一个日期。

我知道这两个日期在 yyyy-MM-dd 方面完全相同

例如:

数据库日期是: 1398891600 = 2014-05-01

X 网站日期是: 1398902400000 = 2014-05-01

C# 代码"converter"

private string DateChecker_inEPOCH(string epochdate)
        {
            if (epochdate.Length < 13)
            {
                epochdate = epochdate + "000";
            }
            DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(epochdate));

            string dateFormated = dt.ToString("yyyy-MM-dd");

            return dateFormated;

        }

问题是,当我使用我的方法转换时,一个数据库日期是 2014-04-30,网站日期是 2014-05-01。

我使用 http://www.epochconverter.com/

测试了日期

Database date is: 1398891600 = 2014-05-01

X Website date is: 1398902400000 = 2014-05-01

EpochConverter.com 给我以下结果:

1398891600000 -> 2014 年 4 月 30 日,星期三 21:00:00 GMT

1398902400000 -> 2014 年 5 月 1 日星期四 00:00:00 GMT

所以你的代码似乎与EpochConverter.com一致。

关于时区,我会确保所有日期都是 stored/retrieved 使用 UTC。在转换 to/from 个不同的时区时,这将为您省去很多麻烦。在这种情况下,假设纪元是相对于 UTC 日期存储的,您只需执行以下操作:

DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(Convert.ToDouble(epochdate));

如果需要向最终用户显示本地时间,则可以使用以下方法:

utcDate.ToLocalTime();