本帖最后由 langsileaa 于 2011-5-14 21:14 编辑
中午看到反馈金山卫士扫描时间问题的帖子,只是简单回复了下。晚上逛卡饭,没想到还在讨论这个问题。就单独发帖,多说点吧。不追求问题实质原因,只口水真的没有必要。
我想N多童鞋都玩过QQ农场吧?而农场外-挂应该也知道了。以前写过农场外-挂,分析封包的资料还在,这里先附上一段:
- {"farmlandStatus":[{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359728,"r":1255359728},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359726,"r":1255359726},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359700,"r":1255359700},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359727,"r":1255359727},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359726,"r":1255359726},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359700,"r":1255359700},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359729,"r":1255359729},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359726,"r":1255359726},{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359725,"r":1255359725}],"items":{"1":{"itemId":213},"2":{"itemId":214},"3":{"itemId":215},"4":{"itemId":216}},"exp":10852,"weather":{"weatherId":3,"weatherDesc":"\u96e8\u5929"},"serverTime":{"time":1255434832},"user":{"uId":7174870,"userName":null,"money":18353,"headPic":null,"exp":10852,"yellowlevel":0,"yellowstatus":0,"canbad":50,"pf":false},"cacheControl":{"seed":7,"tool":1,"diy":2},"a":true,"b":0,"c":false,"task":{"taskId":0,"taskFlag":0}}
复制代码
QQ弄的封包真是简洁,单纯看很难看懂到底代表什么意思。这里提取一块地数据来说明:
{"a":10,"b":1,"c":0,"d":0,"e":1,"f":0,"g":0,"h":1,"i":100,"j":0,"k":0,"l":0,"m":0,"n":[],"o":0,"p":[],"q":1255359728,"r":1255359728},
具体关系如下:
a:种子的编号
b:地的状态,1表示有植物在种
c:曾经是否有草
d:曾经是否有虫子
e:曾经是否干旱
f:大于0有草
g:大于0有虫子
h:等于0干旱
i:优秀程度
j:采摘的次数
l:大于0叶,最小能偷多少?这个不能太确认
m:大于0时,表示还剩下多少个
n:偷过我果实的好友uid列表
0:施肥的次数
p:动作?
q:作物播种时间点
r:更新时间点
看红字部分:q是作物播种时间点,具体数据是1255359728 ,这个1255359728 就是时间。
稍后会推算1255359728 具体代表时间是什么。
先来说明为什么很多地方都会遇到1970-01-01 08:00:00 这时间。真的是穿越造成的?当然不是。
人类使用的计时系统是相当复杂的:秒是基本单位, 60秒为1分钟, 60分钟为1小时, 24小时是一天......如果计算机也使用相同的方式来计时, 那显然就要用多个变量来分别存放年月日时分秒, 不停的进行进位运算, 而且还要处理偶尔的闰年和闰秒以及协调不同的时区. 为了解决这个计时问题,在最早期的Unix系统上采用了一种简洁的计时方式。即计算从1970年1月1日0时0分0秒起到终止点的秒数。为什么选择1970年1月1日0时0分0秒为起始点,那是因为1970年1月1日0时0分0秒起是Unix系统诞生的日子。
这种计时机制也影响了后来其它的系统,比如windows同样引进了这种机制。而C语言初期就用了Time函数即返回从1970年1月1日0时0分0妙算起到现在所经过的秒数。该函数在time.h 头文件内。附带上一个测试效果:
如何计算具体时间呢?自然是从1970-01-01 00:00:00 加上这个大秒数,然后换算为易读形式输出出来。
返回上面QQ农场的数据包,1970-01-01 08:00:00 加上1255359728秒就是了。本来想写程序演示结果,突然有事要出去。
稍后再补充上。
对于金山的问题,应该是时间处理上出了问题。计算时间隔时间并未获取到,或获取错误。从而导致计时值只有1970-01-01 00:00:00 ,所以出现了“穿越”的情况。
金山的是1970-01-01 08:00:00,不是1970-01-01 00:00:00,好吧,1970-01-01 00:00:00是格林尼治时间。我们用的是北京时间这个对吧?北京位于东8区,这个没问题吧?那么1970-01-01 00:00:00 加上8个小时呢?
|