This commit is contained in:
2023-03-04 16:29:55 +08:00
commit 397ba75479
1007 changed files with 109050 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
package com.jsowell.common.util.Cp56Time2a;
import java.io.ByteArrayOutputStream;
import java.util.Calendar;
import java.util.Date;
/**
* TODO
*
* @author JS-ZZA
* @date 2023/2/28 16:50
*/
public class Cp56Time2aUtil {
/**
* int 转换成 byte数组
*/
public static byte[] intToByteArray(int i) {
byte[] result = new byte[4];
result[0] = (byte) ((i >> 24) & 0xFF);
result[1] = (byte) ((i >> 16) & 0xFF);
result[2] = (byte) ((i >> 8) & 0xFF);
result[3] = (byte) (i & 0xFF);
return result;
}
/**
* 日期转换成 CP56Time2a
*
* @param date Date类型日期
* @return {@link Byte}
*/
public static byte[] date2Hbyte(Date date) {
ByteArrayOutputStream bOutput = new ByteArrayOutputStream();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 毫秒需要转换成两个字节其中 低位在前高位在后
// 先转换成short
int millisecond = calendar.get(Calendar.SECOND) * 1000 + calendar.get(Calendar.MILLISECOND);
// 默认的高位在前
byte[] millisecondByte = intToByteArray(millisecond);
bOutput.write(millisecondByte[3]);
bOutput.write(millisecondByte[2]);
// 分钟 只占6个比特位 需要把前两位置为零
bOutput.write((byte) calendar.get(Calendar.MINUTE));
// 小时需要把前三位置零
bOutput.write((byte) calendar.get(Calendar.HOUR_OF_DAY));
// 星期日的时候 week 是0
int week = 0;
// if (week == Calendar.SUNDAY) {
// week = 7;
// } else {
// week--;
// }
// 前三个字节是 星期 因此需要将星期向左移5位 后五个字节是日期 需要将两个数字相加 相加之前需要先将前三位置零
bOutput.write((byte) (week << 5) + (calendar.get(Calendar.DAY_OF_MONTH)));
// 前四字节置零
bOutput.write((byte) ((byte) calendar.get(Calendar.MONTH) + 1));
bOutput.write((byte) (calendar.get(Calendar.YEAR) - 2000));
return bOutput.toByteArray();
}
/**
* CP56Time2a转换成 时间
*
* @param dataByte 数据报文
*/
public static Date byte2Hdate(byte[] dataByte) {
int year = (dataByte[6] & 0x7F) + 2000;
int month = dataByte[5] & 0x0F;
int day = dataByte[4] & 0x1F;
int hour = dataByte[3] & 0x1F;
int minute = dataByte[2] & 0x3F;
int second = dataByte[1] > 0 ? dataByte[1] : (dataByte[1] & 0xff);
int millisecond = dataByte[0] > 0 ? dataByte[0] : (dataByte[0] & 0xff);
millisecond = (second << 8) + millisecond;
second = millisecond / 1000;
millisecond = millisecond % 1000;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.MILLISECOND, millisecond);
return calendar.getTime();
}
}