2013-09-23 40 views
6

Có một số câu hỏi trên trang web này giải thích cách thực hiện điều này. Vấn đề của tôi khi tôi làm những gì dường như làm việc cho tất cả mọi người khác tôi không nhận được ngày hoặc thời gian chính xác. Mã này là ...Chuyển đổi các dấu tích thành DateTime

long numberOfTicks = Convert.ToInt64(callAttribute); 
startDateTime = new DateTime(numberOfTicks); 

Giá trị của callAttribute được = "1379953111"

Sau khi chuyển đổi nó giá trị của numberOfTicks = 1379953111

Nhưng DateTime kết thúc lên được startDateTime = {1/1/0001 12:02:17 AM}

Tôi đã lấy cùng một giá trị cho ve và chuyển đổi nó trực tuyến và nó đi kèm với ngày/giờ chính xác.

Tôi đang làm gì sai?

+0

giá trị gì là bạn mong đợi? – Anthony

+0

có thể trùng lặp của [Cách chuyển đổi dấu thời gian UNIX thành DateTime và ngược lại?] (Http://stackoverflow.com/questions/249760/how-to-convert-unix-timestamp-to-datetime-and-vice-versa) – Romoku

+0

Đó là số lượng ve và nó không có gì để làm với giây. Ngày/giờ tôi mong đợi là 9/23/2013 09:18:31. Nếu tôi nhập số vào Epoch Converter tôi nhận được ngày/giờ chính xác. – Gary

Trả lời

17

Giá trị của bạn dường như không phải là một số bọ ve; Tôi nghi ngờ đó là một dấu thời gian UNIX (số giây kể từ 1970/01/01 UTC)

Dưới đây là một chức năng để chuyển đổi từ một dấu thời gian UNIX:

static readonly DateTime _unixEpoch = 
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 

public static DateTime DateFromTimestamp(long timestamp) 
{ 
    return _unixEpoch.AddSeconds(timestamp); 
} 
+2

Để cứu mọi người khỏi phải kiểm tra, giá trị của câu hỏi là '1379953111' sẽ trả về '9/23/2013 4:18:31 PM', điều này chắc chắn chỉ ra đây là câu trả lời đúng cho rằng người dùng gần đây đã sử dụng' DateTime .Now' hoặc tương tự và anh ấy có thể ở một múi giờ khác hoặc một vài giờ bù đắp bằng cách này hay cách khác. – Anthony

+2

Bạn nên chỉ định "loại" của kỷ nguyên Unix như Utc, cho rằng đó là cách mà kỷ nguyên Unix được định nghĩa. –

+0

@JonSkeet, điểm tốt; Tôi đã cập nhật mã. –

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