2009-11-19 47 views
5

Tôi phải thực hiện một lỗi rõ ràng nhưng tôi không thể hiểu được.Dấu thời gian Unix tới .net DateTime

Tôi đang nhập ngày được lưu trữ trong cơ sở dữ liệu mysql (nó được lưu trữ bởi ExpressionEngine CMS). Đó là dấu thời gian unix, tức là giây kể từ 1/1/1970 00:00.

Vì vậy, tôi đang làm một cái gì đó như thế này:

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

Đáng tiếc là tôi không nhận được kết quả đúng. Dưới đây là một ví dụ:

Giá trị đọc từ DB: (đây là ngày lập hóa đơn)

Paypal đã gửi một email thành lập trật tự tại ngày 18 tháng 11 năm 2009 12:45:20 PST

Trang web php đọc giá trị này trong DB và biết cách hiển thị ngày này hiển thị chính xác nó là 2009-11-18 03:45 PM (có vẻ như chính xác vì tôi được lưu trữ tại máy chủ trên bờ biển phía đông)

Mã của tôi ở trên cung cấp cho 11/19/2009 2:45:28 AM !! (UTC cung cấp cho 11/18/2009 9:45 chiều theo giờ miền đông, tức là 6 giờ khác biệt với những gì được mong đợi)

Tôi nhận được kết quả tương tự nếu sử dụng DateTimeOffset đảm bảo đặt đúng múi giờ.

Bất kỳ ý tưởng nào tôi đang làm sai?

Trả lời

9

Hãy thử điều này:

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

Nó in: 11/18/2009 9:45:28 PM ở đây (GMT-4) – Gonzalo

+0

có i'ts vẫn có cùng giá trị tôi nhận được (6 giờ khác biệt với giá trị dự kiến) –

+0

tốt, sau đó nó phải là một vấn đề với dữ liệu. – scottm

0

chuyển đổi của bạn là chính xác, dữ liệu là sai. Đó là giải thích đơn giản và có khả năng nhất.

Các vấn đề liên quan