2015-05-21 7 views
3

У меня есть клиентское и серверное приложение. Клиент находится на сервере Великобритании, и сервер находится на US-сервере.UTC Разница во времени сервера

На сервере есть проверка, которая проверяет, когда сообщение было отправлено от клиента, и сравните его, чтобы увидеть разницу во времени.

Это, как я получаю промежуток времени на клиентском приложении (Великобритания):

DateTime epochStart = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc); 
TimeSpan timeSpan = DateTime.UtcNow - epochStart; 
// Convert to string before send it to server 
string requestTimeStamp = Convert.ToUInt64(timeSpan.TotalSeconds).ToString() 

На сервере (США) конца у меня есть: отлично

DateTime epochStart = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc); 
TimeSpan currentTs = DateTime.UtcNow - epochStart; 

var serverTotalSeconds = Convert.ToUInt64(currentTs.TotalSeconds); 
var requestTotalSeconds = Convert.ToUInt64(requestTimeStamp); 

if ((serverTotalSeconds - requestTotalSeconds) > requestMaxAgeInSeconds) 
{ 
    //.... 
} 

Все работает, когда сервер и клиент находится на сервере Великобритании, но проблемы возникают, когда есть разные.

Мои вопросы:

  1. ли время UTC таже на обоих серверах независимо от разницы во времени зоны/время?
  2. Является ли время, взятое из системного времени ПК? (Так что, если время устанавливается в неправильном в системе DateTime.UtcNow дают мне неправильное время?)
+2

«но проблемы возникают ...» - не могли бы вы на самом деле описать нам, какие проблемы? –

+0

правильный по обоим пунктам. в частности, если время сервера составляет всего несколько секунд, ваши сравнения не будут полностью точными. однако, если все сообщения поступают на сервер США, то эта неточность будет постоянной, поэтому вы должны разработать стратегию для решения этой проблемы. –

+0

Взгляните на это: https://technet.microsoft.com/ en-us/library/cc773013% 28v = ws.10% 29.aspx –

ответ

1

ли время UTC таже на обоих серверах независимо от разницы во времени зоны/время?

В теории, должно быть. Однако, в зависимости от сервера NTP, с которым и клиент и сервер общаются, они потенциально могут быть разными. Надеюсь, если они разные, это очень небольшая разница.

Пришло ли время, потраченное системным временем ПК? (Так что, если время устанавливается в неправильном в системе DateTime.UtcNow дают мне неправильное время?)

Да, MSDN's DateTime.UtcNow documentation говорит следующее:

Возвращает объект DateTime, который установлен в текущую дату и время на этом компьютере, выраженное как скоординированное всеобщее время (UTC).

+0

, так что просто уточнить, является ли клиентское время машины 2PM, а часовой пояс - UCT (Лондон, Дублин и т. Д.), А время сервера - 6 утра (8 часов позади), а часовой пояс - США - Калифорния - Сан-Франциско DateTime.UtcNow должен показывать то же самое время? – Greg

+0

'DateTime.UtcNow' * должен * показывать точное время. Там ** ** могут быть несоответствиями, но они ** должны быть очень маленькими. Мое лучшее предположение было бы не больше миллисекунд разницы. Если вам нужна точность до тиков по сети, вам нужно переосмыслить свою стратегию. – Cameron

Смежные вопросы