北京时间和旧金山时间差多少?
今天2014/6/30 下午5点13分,我打开google map,搜索“beijing” 和 “san francisco” 得到的地图画面是: 这上面显示的是北京时间,但地图上是旧金山,这到底是怎么回事。。。。 搜索其他的地点,得到的结果也是这样!!!! 我很吃惊,于是搜了搜关于这个问题的讨论。 结果让我更吃惊。 在知乎看到这个题目下的答案还是错的多。
首先,确定一点: google map 根据的是地球自转,不是地理位置。 所以如果按地理来说,应该是旧金山时间减去北京时间(忽略国际日期变更线等等)。 但事实是,Google 的地图根据的是网络请求的时间。 而百度地图根据的也是网络请求的时间。 所以理论上来讲,用网络请求本地时间的方式应该是最准确的,因为不管你怎么移动设备,你所处的地方时间总是相对于网络服务器时间的延迟最少的(除非你在飞机或宇宙中)。 但是,你看到的问题却不是这样。
为什么会出现这种问题呢? 我们来想一想: 一个东西想要发送出去,需要两个条件:
1 有信号;
2 能传到目的地。 而一个东西能不能顺利传到目的地,取决于很多因素,比如路上的拥堵等等。 同样地,一个网络请求能不能到达终点,也受到很多因素影响。 其中一个影响因素可能是「请求被延误」,这时就会出现虽然A比B晚2个小时发出去,而B比A早半个小时接收到的情况——也就是先收到后发出的消息。
这就是由于网络原因导致的,接收端接收信息晚了半小时,所以出现「错误的时间轴」。 那么,为什么google 地图和百度地图会给出错的时间呢? 最可能的原因是:
1 谷歌地图和百度地图的加载数据时,每次都是从他们的服务器上下载的,在下载的时候没有考虑具体的时间差别,导致每一张图都是统一加载的「之前8小时」内的数据(或者任何其他设定的时间段),进而导致了全部图片都是「应该更早收到的消息」;
2 或者,谷歌地图和百度地图每刷新一次,就是向它们的服务器发送了一个请求,在发送请求时没有考虑到时间因素,从而导致所有刷新都是「发送给服务器的请求晚于它所获取的数据发出」,进而产生了「之后8小时」的错误时间。
个人推测后者可能性更大。 因为从原理上讲,不管是哪项技术,要想精确掌控几分钟甚至毫秒级的更新速度是不现实的。 如果有人能够保证自己的手机绝对比谷歌服务器快,当然可以轻易解决这个时间问题。 可惜没有人能够做到这一点…… 至少我没有找到解决办法…… 这个bug 也许只有google 和百度自己才能搞定。