美文网首页
CP56time2a java 解析

CP56time2a java 解析

作者: 秋元_92a3 | 来源:发表于2020-09-11 12:23 被阅读0次

对于java解决这个问题,注意一下几个点

1、java中byte的范围是-127128,C语言中byte的范围是0255,所有当两个语音进行交互的时候,需要在java中进行数值的兼容处理,所有在我的程序中有小于0,加256的处理
2、Calendar中,月份是从0开始变化的,Calendar中获取月份获取到的值是8,说明当前是9月,如果是与C进行交互,发送的时候需要在获取到的月份的数值上加1.解析时需要在获取的数值上减1;

package com.fp.pile.cp;

import java.util.Calendar;
import java.util.Date;

/**
 * CP56time2a
 *
 * @author drebander
 * @since 2020-09-11 11:35 上午
 **/
public class Cp56Time2a {

    public static Date toDate(byte[] bytes) {
        int milliseconds1 = bytes[0] < 0 ? 256 + bytes[0] : bytes[0];
        int milliseconds2 = bytes[1] < 0 ? 256 + bytes[1] : bytes[1];
        int milliseconds = milliseconds1 + milliseconds2 * 256;
        // 位于 0011 1111
        int minutes = bytes[2] & 0x3f;
        // 位于 0001 1111
        int hours = bytes[3] & 0x1f;
        // 位于 0000 1111
        int days = bytes[4] & 0x0f;
        // 位于 0001 1111
        int months = bytes[5] & 0x0f;
        // 位于 0111 1111
        int years = bytes[6] & 0x7f;
        final Calendar aTime = Calendar.getInstance();
        aTime.set(Calendar.MILLISECOND, milliseconds);
        aTime.set(Calendar.MINUTE, minutes);
        aTime.set(Calendar.HOUR_OF_DAY, hours);
        aTime.set(Calendar.DAY_OF_MONTH, days);
        aTime.set(Calendar.MONTH, months);
        aTime.set(Calendar.YEAR, years + 2000);
        return aTime.getTime();
    }

    public static byte[] toBytes(Date aDate) {
        byte[] result = new byte[7];
        final Calendar aTime = Calendar.getInstance();
        aTime.setTime(aDate);
        final int milliseconds = aTime.get(Calendar.MILLISECOND);
        result[0] = (byte) (milliseconds % 256);
        result[1] = (byte) (milliseconds / 256);
        result[2] = (byte) aTime.get(Calendar.MINUTE);
        result[3] = (byte) aTime.get(Calendar.HOUR_OF_DAY);
        result[4] = (byte) aTime.get(Calendar.DAY_OF_MONTH);
        result[5] = (byte) aTime.get(Calendar.MONTH);
        result[6] = (byte) (aTime.get(Calendar.YEAR) % 100);
        System.out.println("Year->" + aTime.get(Calendar.YEAR));
        return result;
    }

    public static void main(String[] args) {
        Date aDate = new Date();
        System.out.println(aDate);
        final byte[] bytes = toBytes(aDate);
        final Date date = toDate(bytes);
        System.out.println(date);
    }

}

相关文章

网友评论

      本文标题:CP56time2a java 解析

      本文链接:https://www.haomeiwen.com/subject/zutxqhtx.html