5

我一定犯了一个明显的错误,但我无法弄清楚。

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

所以我正在做这样的事情:

DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(orderdate /* int read from the database */);

不幸的是,我没有得到正确的结果。这是一个例子:

从 DB 读取的值:1258598728(这是订单日期)

Paypal 在太平洋标准时间 2009 年 11 月 18 日 12:45:20发送了一封建立订单的电子邮件

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

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

如果使用 DateTimeOffset 来处理正确的时区,我会得到相同的结果。

知道我做错了什么吗?

4

3 回答 3

9

尝试这个:

DateTime epoch = new DateTime(1970,1,1,0,0,0,0, DateTimeKind.Utc);
DateTime myDate = epoch.AddSeconds(1258598728).toLocalTime();
于 2009-11-19T20:32:35.683 回答
1

http://www.onlineconversion.com/unix_time.htm确认您的计算是正确的。Unix 时间 1258598728 = "2009 年 11 月 19 日星期四 02:45:28 GMT"

于 2009-11-19T21:14:36.893 回答
0

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

于 2009-11-19T21:07:49.527 回答