UTC时间服务器差异

时间:2015-05-21 11:55:27

标签: c# datetime

我有一个客户端和服务器端应用程序。客户端位于英国服务器上,服务器位于美国服务器上。

服务器上有一个验证,用于检查客户端发送邮件的时间,并将其与时间差进行比较。

这就是我在客户端应用程序(英国)上获得时间跨度的方式:

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. 是从PC系统时间中取出的时间吗? (如果系统中的时间设置错误,DateTime.UtcNow给我错误的时间?)

1 个答案:

答案 0 :(得分:1)

  

无论时区/时差如何,两台服务器的UTC时间是否完全相同?

理论上,它应该是。但是,根据客户端和服务器通信的NTP服务器,它们可能会有所不同。希望如果它们不同,那就是非常的小差异。

  

是否需要从PC系统时间开始计算? (如果在系统中将时间设置为错误,则DateTime.UtcNow给我错误的时间?)

是的,MSDN's DateTime.UtcNow documentation说明如下:

  

获取一个DateTime对象,该对象在此计算机上设置为当前日期和时间,表示为协调世界时(UTC)。