2012-01-17 90 views
3

我有一個計算時間了用戶的時間和工作原理是這樣的UTC時間之間的偏移量的方法:時區在asp.net偏移

public int GetUserLocalTimeToUTCOffset() 
{   
    DateTime TheUTC = DateTime.UtcNow; 
    DateTime TheLocal = ConvertUTCTimeToUserTime(TheUTC); //*see below 

    TimeSpan TheTimeOffset = TheLocal - TheUTC; 

    return (int)TheTimeOffset.TotalMinutes; 
} 

public DateTime ConvertUTCTimeToUserTime(DateTime TheUTCTime) 
{ 
    TimeZoneInfo TheTZ = TimeZoneInfo.FindSystemTimeZoneById(this.UserTimeZoneID); 
    // try with "Eastern Standard Time" and "W. Europe Standard Time" 
    DateTime UTCTime = new DateTime(TheUTCTime.Year, TheUTCTime.Month, TheUTCTime.Day, TheUTCTime.Hour, TheUTCTime.Minute, 0, DateTimeKind.Utc); 

    return TimeZoneInfo.ConvertTime(UTCTime, TheTZ); 
} 

如果用戶是在美國東部時區,該方法返回-300(即60 * -5)。然而,如果用戶在歐洲西部時間,那麼該方法返回59而不是60。不是那麼大的一個biggie,但我想知道爲什麼它不返回60以及我需要做出什麼變化。

謝謝。

+2

ConvertUTCTimeToUserTime中的代碼可能與確定答案有關,因爲它直接涉及計算。 – 2012-01-17 21:46:01

+0

@JeremyS:見編輯,我添加了其他功能。 – frenchie 2012-01-18 08:28:39

回答

2

屬性TotalMinutes返回一個雙精度值。我的猜測是將其轉換爲int可以降低該值。

在返回之前嘗試將您的值舍入。我會修改你的返回語句,以使總分鐘值達到四捨五入。

return (int)Math.Ceiling(TheTimeOffset.TotalMinutes); 
+0

好的,我需要改變什麼? – frenchie 2012-01-18 08:28:51

+0

我已經對我之前的帖子進行了編輯,希望這個例子能夠解決您的問題。 – legrandviking 2012-01-18 19:01:08

+0

好吧,非常酷,這就是它所需要的。感謝你的回答。 – frenchie 2012-01-18 20:02:50