如何计算美国时间?
楼上的答案都很复杂,对于非计算机专业人士来说理解难度太大。我来提供一个简单的方法,只需要知道一个基本的时间概念就可以了——时区(Time Zone)。 假设A和B两个人,分别在中国东部时间和美国西部时间。由于地球是圆的,在A看来B所在的位置应该是在中国东部时间的东八区;同样,在B看来A所在的位置应该在美国的西五区。这时如果A给B发送一条短信或者QQ消息,网络传递到B的时候,就会根据手机导航确定B的实际地理位置,然后按照相应的时区的北京时间来发送消息。这样A和B看起来消息发送的时间就一致了。 但是问题就在于,A和B可能不在一个时区里!更糟糕的是,A可能还在中国境内不同的两个城市,此时他们之间的地理距离要比上面的例子远得多。但无论怎样,通过上面的方法,他们在电脑上显示的消息发送时间就完全一致了。这就是互联网时间(Internet Time)的统一性。
但是,这种统一性是有代价的——它牺牲了精度。互联网时间只能保证不同地理位置的用户收到消息时,显示的时间是一致的,但它不能确保消息发出去的时刻就是用户显示器上显示的时刻。为了精确地控制发送时刻,我们就需要将世界分成很多个小块,每个小块对应一个时区,这样的分法要求每一个时区内所有用户的显示器上显示的时间都必须同时达到精确的要求。这就是UTC(Universal Coordinated Time),又称GMT(Greenwich Mean Time)。
从网上可以查到世界各地划分时的区号以及对应的时区名称。 时区是个很抽象的概念,不容易理解。举个例子就更容易说明:假设你想让美国西部的客户收到你发出的邮件,当你点击“发送”按钮后,你的邮件服务器会根据你所指定的收件人地址和你的操作系统设置确定该邮件的目的地。如果收件人是位于美国西部的某台计算机,那么服务进程会先拨通到达该地的网关,然后将信息发送到该网关中继缓冲区。接着,另一个进程会从该网关中取出信息,按序发出,其中每一帧的信息都会加上发送时间以供接收方校正。
最后,当该信息终于抵达目的地,接收方会倒序读取信息流,重新组建原档案,并计算发送时间差,与自己的本地计时器比较,得出邮件发送所耗费的时间。因为所有这些信息在传输前都已经过加密处理,所以接收方无法直接判定信息的始发时间,只能通过计算得出。然而计算结果会受到网络延迟、数据报文丢失等影响,造成估算误差。 如果你是想向美国西部客户发送实时消息(如QQ消息),那么你只要在美国西部客户所在的时区选择登录即可。如果是你想发送延时消息(如邮箱、微博等),则可以先发再补时差(这会造成信息送达延迟,但在互联网中很常见)。