mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-22 03:55:17 +08:00
commit
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user