接收到服务器的数据为:
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并且日期和时间都不对,望解答

解决方案 »

  1.   

    我觉得应该是你这句的问题        b[6]=(byte) (-29+256);
    这样仍然是超出byte返回,所以不b[6]仍然是负数(-29),然后你用BigInteger就会有问题了
      

  2.   

    做法没错,可能本来b[]的值就不对吧。
    你让
            b[0]=0;
            b[1]=0;
            b[2]=0;
    看上去就是正确的了
      

  3.   

    b[6]=-29;
    174470732-07-07 20:33:48 和   b[6]=(byte) (-29+256);
    写法没差啊?按照你说的写法,输出1974-07-10 08:11:32,看上去是对了,但是时间是错误的时间,
    难道是发送过来的数据有问题,不可能啊? socket通讯,我这是客户端,数据是从C++写的服务器段发送过来的,协议是它用8个字节定义时间类型实在想不通问题出在哪
      

  4.   

    那肯定是发错了,或者你收错了!
    Java Doc里面写得很清楚:
    new Date(long millisecond),这个参数millisecond是从1970-01-01 00:00:00:000开始计时的毫秒数
      

  5.   

    刚才没看清楚,以为你的对方也是JAVA呢
    如果是C++,那你得去问问对方这8字节的含义了
      

  6.   

    做Delphi的解析出来的数据是
    246  40  92  143  77  109  227  64
    接收了几次发现后4个数字是固定的,我想应该是年月日,
    我接收的后4个也是和他一样,所以说接收数据是没错的
    错的只是在解析上面,但是思路应该是没错,
    还真是不知道这么解决