2012-12-12 40 views
1

我正在使用UTC格式的數據庫中存儲日期時間的Web應用程序。現在,當我檢索在UI中顯示的日期時間時,我必須將日期時間轉換爲用戶使用應用程序的特定時間。服務器端和客戶端的時區偏移量不相同

要將UTC的時間轉換爲特定的當地時間,我正在進行一些演示研究。我找到了兩種轉換時間的方法。一個來自服務器端,另一個來自客戶端。在服務器端,我使用ASP.NET,而在客戶端,我使用的是JavaScript。但問題是答案不一樣。

我在給代碼。

服務器端:

Label1.Text = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString(); 

客戶端:

$(document).ready(function() { 
    var offset = new Date().getTimezoneOffset(); 
    $('#Label1').text(offset/60); 
}); 

在服務器端代碼是示出在標籤五點30分00秒的情況下。 在客戶端代碼的情況下,它在標籤中顯示-5.5。

我的問題是爲什麼這兩個UTC偏移量不一樣?

+0

[時區偏移](http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.26)在javascript中增加了當地時間以獲得UTC。此外,抵消甚至不是幾個小時,一些有半小時,至少有一個有15分鐘。傳遞時間的最好方法是使用timevalue(例如'date.getTime()'),因爲它返回UTC以UTC開始的時間,並且可以賦予日期構造函數以獲得等效的本地日期和時間值。 – RobG

+0

兩者都是相同的:-) – Subin

回答

1

偏移量的格式不同。
服務器端示例似乎是一個類似於Date的對象。客戶端版本似乎是int330)。

雖然這些值看起來相匹配。

看着the specification,你的服務器端代碼返回一個TimeSpan對象,while your JavaScript確實返回一個整數。

0

這只是一個格式化的東西。如果您的偏移量爲+5:30,那麼getTimezoneOffset將返回330,這是將當地時間添加到UTC的分鐘數。

如果你路過的時候爲毫秒的值,因爲1970-01-01T00:00:00Z那麼你可以直接把那個給Date構造函數:

var localDate = new Date(timevalue); 

要返回對應的UTC時間值使用getTime

var UTCTimeValue = localDate.getTime(); 

javascript日期對象使用UTC時間值與系統時區偏移返回本地日期和時間值(getDategetHours例如,等),或UTC值,如果UTC方法是CAL led(如getUTCDate,getUTCHours等)。