gps设备上传数据到服务器,服务器取本机时间应该不是gps设备发送数据的时间。gps设备上传时间的话占字节太多,所以gps设备上传个占用1字节的校验位,此校验位是gps时间对240取模的模值。本文通过该模值换算得到gps设备上传数据的时间,只用于误差小于2min的情况。
1 private static DateTime GetGPSTime(byte secbyte)//参数为时间校验位
2 {
3 double gpstime = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
4 int sec = (int)gpstime%60;
5 int m4 = (int)(gpstime/60) & 3;
6 int gsec = ((int) secbyte)%60;
7 int gm4 = (((int) secbyte)/60) & 3;
8 gpstime = gpstime -sec + gsec;
9
10 if (m4 != gm4)
11 {
12 int i1 = gm4 << 4;
13 int b1 = i1 | m4;
14 switch ((gm4 << 4) | m4)
15 {
16 case 0x01:
17 case 0x12:
18 case 0x23:
19 case 0x30:
20 gpstime -= 60;
21 break;
22 case 0x02:
23 case 0x13:
24 case 0x20:
25 case 0x31:
26 gpstime -= 120;
27 break;
28 case 0x03:
29 case 0x10:
30 case 0x21:
31 case 0x32:
32 gpstime += 60;
33 break;
34 default:
35 break;
36 }
37 }
38 DateTime gTime=new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(Convert.ToInt32(gpstime + 28800));
39 return gTime;
40 }