Unix时间戳到.net日期时间

Unix时间戳到.net日期时间,.net,datetime,timestamp,expressionengine,.net,Datetime,Timestamp,Expressionengine,我一定是犯了一个明显的错误,但我想不出来 我正在导入存储在mysql数据库中的日期(它由ExpressionEngine CMS存储)。它是unix时间戳,即自1970年1月1日00:00起的秒数 所以我在做这样的事情: DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); dateTime = dateTime.AddSeconds(orderdate /* int read from the database */)

我一定是犯了一个明显的错误,但我想不出来

我正在导入存储在mysql数据库中的日期(它由ExpressionEngine CMS存储)。它是unix时间戳,即自1970年1月1日00:00起的秒数

所以我在做这样的事情:

DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(orderdate /* int read from the database */);
不幸的是,我没有得到正确的结果。以下是一个例子:

从数据库读取的值:1258598728(这是订单日期)

贝宝于2009年11月18日太平洋标准时间12:45:20发送了一封确认订单的电子邮件

在数据库中读取此值并知道如何正确显示此日期的php网站将其显示为2009-11-18 03:45 PM(这似乎是正确的,因为我托管在东海岸的服务器上)

我上面的代码给出了2009年11月19日凌晨2:45:28!!(UTC,2009年11月18日东部时间晚上9:45,即与预期相差6小时)

如果使用DateTimeOffset并注意放置正确的时区,我会得到相同的结果

知道我做错了什么吗?

试试这个:

DateTime epoch = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc);
DateTime myDate = epoch.AddSeconds(1258598728).toLocalTime();

您的转换是正确的,数据是错误的。这是最简单也是最有可能的解释。

证实了你的计算是正确的。Unix time 1258598728=“Thu,2009年11月19日02:45:28 GMT”

它打印时间:11/18/2009 9:45:28 PM(GMT-4)是的,我得到的值仍然相同(与预期值相差6小时),那么数据一定有问题。