接收到服务器的数据为:
76 104 47 33 54 109 -29 64
想转换成时间类型,思路大概是装成long,在转成data byte[] b=new byte[8];
b[0]=76;
b[1]=104;
b[2]=47;
b[3]=33;
b[4]=54;
b[5]=109;
b[6]=(byte) (-29+256);
b[7]=64;
BigInteger bi = new BigInteger(b);
long l = bi.longValue();
Date mydate=new Date(l);
System.out.println(mydate.toString());
SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String etime=format.format(mydate);
System.out.println(etime);
但是输出结果为:
Thu Jul 07 20:33:48 CST 174470732
174470732-07-07 20:33:48并且日期和时间都不对,望解答
76 104 47 33 54 109 -29 64
想转换成时间类型,思路大概是装成long,在转成data byte[] b=new byte[8];
b[0]=76;
b[1]=104;
b[2]=47;
b[3]=33;
b[4]=54;
b[5]=109;
b[6]=(byte) (-29+256);
b[7]=64;
BigInteger bi = new BigInteger(b);
long l = bi.longValue();
Date mydate=new Date(l);
System.out.println(mydate.toString());
SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String etime=format.format(mydate);
System.out.println(etime);
但是输出结果为:
Thu Jul 07 20:33:48 CST 174470732
174470732-07-07 20:33:48并且日期和时间都不对,望解答
这样仍然是超出byte返回,所以不b[6]仍然是负数(-29),然后你用BigInteger就会有问题了
你让
b[0]=0;
b[1]=0;
b[2]=0;
看上去就是正确的了
174470732-07-07 20:33:48 和 b[6]=(byte) (-29+256);
写法没差啊?按照你说的写法,输出1974-07-10 08:11:32,看上去是对了,但是时间是错误的时间,
难道是发送过来的数据有问题,不可能啊? socket通讯,我这是客户端,数据是从C++写的服务器段发送过来的,协议是它用8个字节定义时间类型实在想不通问题出在哪
Java Doc里面写得很清楚:
new Date(long millisecond),这个参数millisecond是从1970-01-01 00:00:00:000开始计时的毫秒数
如果是C++,那你得去问问对方这8字节的含义了
246 40 92 143 77 109 227 64
接收了几次发现后4个数字是固定的,我想应该是年月日,
我接收的后4个也是和他一样,所以说接收数据是没错的
错的只是在解析上面,但是思路应该是没错,
还真是不知道这么解决