开发者社区> 问答> 正文

把8位时间类型的字符串存入一个长度为3的byte数组中:报错

1、将一个8位长度的时间字符串(如:“20180409”)存入一个长度为3的byte数组中

2、从这个3个长度的byte数组总读取时间并还原成8位长度的时间字符串

展开
收起
kun坤 2020-06-06 23:07:38 458 0
1 条回答
写回答
取消 提交回答
  • 用位运算就行了。3个字节,24位。5位来存日,2的5次方=32,存日可以了;同理,用4位来存月,剩下的15位来存年。刚开始把日期截成年、月、日,分别转成整型,然后申请3个字节的内存,再用位移和or操作就可以了

    ######

    最大23位就可以存下....

    9999-12-31 :

    10011100001111 1100 11111

    System.out.println(Integer.toBinaryString(2018));//11111100010
    System.out.println(Integer.toBinaryString(4));//100
    System.out.println(Integer.toBinaryString(9));//1001

     存的时候你就位移和逻辑运算就行了.

    ######

    可否限制时间字符串中的年份在 [1782-2127] ? 若可以的话,byte数组的三个元素分别代表:年份、月份、和日, 只是年份以2000为准,用正负表示:比如,用 -10 表示 1990。

    ######

    简单的写了一下,参见:

    https://blog.xdemo.cn/java-8date-story-3bytes/

    ######

    看了大神给的思路,给弄出来了,感谢大神

    存值:

    public byte[] StringToByte(String date) {
    		int i, year, month, day;
    		year = Integer.parseInt(date.substring(0, 4));
    		year = year << 9;
    		month = Integer.parseInt(date.substring(4, 6));
    		month = month << 5;
    		day = Integer.parseInt(date.substring(6));
    		i = year | month | day;
    		byte[] data = new byte[3];
    		data[2] = (byte) (i & 0xFF);
    		data[1] = (byte) ((i >> 8) & 0xFF);
    		data[0] = (byte) ((i >> 16) & 0xFF);
    		return data;
    	}

    取值:

    public String ByteToString(byte[] data) {
    		int year, month, day;
    		day = data[2] & 0x1F;
    		month = (((data[1] << 3) & 0xF) | ((data[2] >> 5) & 0x7)) & 0xF;
    		year = (data[0] << 7) | ((data[1] >> 1) & 0x7F);
    		String date = new String(Integer.toString(year));
    		date.concat(Integer.toString(day));
    		if (month < 10) {
    			date = date.concat("0").concat(Integer.toString(month));
    		} else {
    			date = date.concat(Integer.toString(month));
    		}
    		if (day < 10) {
    			date = date.concat("0").concat(Integer.toString(day));
    		} else {
    			date = date.concat(Integer.toString(day));
    		}
    		return date;
    	}

     

    2020-06-06 23:07:42
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载