2011-10-19 249 views
2

我們正在開發一個C#web應用程序,它必須處理Unix時間戳和C#DateTime對象。時間戳必須轉換爲DateTime對象。C#:Unix時間戳和日期時間

下面的例子顯示了我的問題:日期時間應該是'18 .10.2011 14時02' 分32秒

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
time = time.AddSeconds(1318939352); 
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 12:02:32 

如果我在我的開發機器上調用ToLocalTime(),日期時間是正確的:

System.DateTime time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 
time = time.AddSeconds(1318939352).ToLocalTime(); 
System.Console.Out.WriteLine("Time: " + time); // -> 18.10.2011 14:02:32 

但是,應用程序將運行在另一個時區(GMT標準時間)託管的服務器上,因此我必須處理不同的時區,第二個示例在此服務器上失敗。 無論我主持應用程序的位置如何,本例中的日期應始終打印爲18.10.2011 14:02:32。

有誰知道我該怎麼做?提前致謝!

最好的問候, 托爾斯滕

+1

時,你的情況下,爲什麼不指定'DateTimeKind.Utc',運作的?像新的System.DateTime(1970,1,1,0,0,0,0,DateTimeKind.Utc);'(希望14:02:32是格林尼治標準時間) – V4Vendetta

+0

總是以UTC存儲時間,這是客戶端應用程序告訴服務器如何將輸出格式化的時間。 – Angelom

+0

@ V4Vendetta - 14:02:32是GMT + 2 – Polity

回答

0

你可以看看TimeZoneInfo

public struct DateTimeWithZone 
{ 
    private readonly DateTime utcDateTime; 
    private readonly TimeZoneInfo timeZone; 

    public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone) 
    { 
     utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone); 
     this.timeZone = timeZone; 
    } 

    public DateTime UniversalTime 
    { 
     get { return utcDateTime; } 
    } 

    public TimeZoneInfo TimeZone 
    { 
     get { return timeZone; } 
    } 

    public DateTime LocalTime 
    { 
     get { return TimeZoneInfo.ConvertTime(utcDateTime, timeZone); } 
    }   
}