2015-04-25 32 views
2

應用程序在本地主機上運行。服務器比客戶端早一個小時!爲什麼本地主機上的客戶端和服務器之間存在時差

客戶端發送時間:Sat Apr 25 2015 00:00:00 GMT-0400 (Eastern Daylight Time)

enter image description here

請求被髮送:dateOfArrival: "2015-04-25T04:00:00.000Z"

enter image description here

服務器接收時間:{4/24/2015 11:00:00 PM}

enter image description here

爲什麼與我該如何處理它有一小時的差異?我猜可能是夏令時與標準時間有關。

當我嘗試此代碼:

string dateStr = "2015-04-25T04:00:00.000Z"; 
var myDate = DateTime.Parse(dateStr); // it gives me myDate = {4/25/2015 12:00:00 AM} 

其實我的時間只有一天感興趣的部分。在我的分貝,我把它作爲日期類型。但由於這個時間差異,我的日子前一天。

我試過各種方式來處理問題,但我完全失去了在日期時間轉換世界!即使我在本地主機應用程序丟失,我無法想象在活服務器上會發生什麼。

我覺得this Q&A也提到類似的問題,但如果它很重要,我不能弄明白 :

我的時區:東部時區(UTC-05:00)

關於Web API的OData JSON序列,from this post我可以說,這是其他然後this one

這裏是我的服務器代碼:

// PATCH: odata/IncomingStudents(5) 
[AcceptVerbs("PATCH", "MERGE")] 
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<IncomingStudent> patch) 
{ 
    Validate(patch.GetEntity()); 
    var dateOfArrival = patch.GetEntity().DateOfArrival 
... 
} 

客戶端是angularjs發送http修補請求

回答

1

爲避免客戶端和服務器之間的時區差異(或同一臺計算機內的不同配置),您可能希望將UTC用於任何傳輸並將其存儲在數據庫中。

這意味着,在服務器端,您可能需要DateTime.ToUniversalTime()來調整日期,或者DateTime.UtcNow以獲得當前日期&時間。

從javascript可能是一個好主意,使用moment.js來緩解日期的處理。

使用時刻。JS,你可以得到在UTC值以下列方式:

var localDate = new Date(); 
var inUtc = moment(localDate).utc(); 

你會在他的本地偏差顯示信息給用戶,但始終發送到服務器並接收返回的使用UTC。

0

服務器代碼像在APP池中的用戶的用戶上下文中一樣運行。
客戶端瀏覽器中的java腳本確定了那裏的時區。

這些時區可能不同。

1

推理解決:在分貝dateOfArrival的

值是:2015年4月25日(僅日期)
服務器採用的值使得:2015-04-24T23:00:00-05:00

在客戶端,新的日期(dateOfArrival)給出2015-04-25T04:00:00.000Z
這個值發送到服務器和服務器使得它2015年4月24日下午十一時○○分00秒

服務器收到相同的值。

this post所述,如果日期不在日光節約時間範圍內(例如2015年1月1日),所有日期將相同。

另一方面,因爲我使用web api odata,因爲它只適用於DateTimeOffset,但不適用於DateTime我想這個時區問題發生了

相關問題