Tôi đang cố gắng để có được GMT trong thời gian unix. Tôi sử dụng đoạn mã sau:Chuyển đổi thời gian Unix trong C#
public static long GetGMTInMS()
{
var unixTime = DateTime.Now.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)unixTime.TotalMilliseconds;
}
Để sau đó chuyển đổi thời gian unix trở về một đối tượng DatTime, tôi sử dụng này:
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp).ToLocalTime();
return dtDateTime;
}
Khi tôi chạy nó, GetGMTInMS()
1320249196267
. Khi tôi chuyển nó đến UnixTimeStampToDateTime()
Tôi nhận được {11/2/2011 11:53:16 AM}
Điều đó là tốt. Đó là thời điểm chính xác khi tôi chạy mã của tôi. Vấn đề tôi có là khi tôi thử và đặt 1320249196267
vào bộ chuyển đổi thời gian unix, chẳng hạn như this, nó trả về thời gian hoàn toàn sai.
Vấn đề khác, là tôi đang ở múi giờ phía đông. Điều này trả về thời gian trong múi giờ của tôi. Đây có phải là điều mà đối tượng xử lý đối tượng DateTime
hoặc tôi không nhận được GMT.
Loại trả về có phải là 'ulong' thay vì dài, vì dấu thời gian UNIX không được âm? –
@ErikSchierboom: Vâng điều đó phụ thuộc - có rất nhiều kịch bản trong đó "giây kể từ thời đại Unix" hoặc "mili giây kể từ thời đại Unix" được sử dụng trong đó chúng * có thể * là âm. Cho rằng 'long.MaxValue' giây là bao giờ như vậy một chặng đường dài đi, tôi nghĩ rằng nó có ý nghĩa hơn để được linh hoạt và chấp nhận giá trị tiêu cực cho thời gian trước khi 1970. –
Được rồi, tôi hiểu! Cảm ơn lời giải thích. –