You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.8 KiB
77 lines
2.8 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace HybirdFrameworkServices.Charger.BatCharging.Service
|
|
{
|
|
public static class BcdTimeConverter
|
|
{
|
|
public static long ConvertToBcdTime(DateTime dateTime)
|
|
{
|
|
// 将DateTime的各个部分分离出来
|
|
int year = dateTime.Year;
|
|
int month = dateTime.Month;
|
|
int day = dateTime.Day;
|
|
int hour = dateTime.Hour;
|
|
int minute = dateTime.Minute;
|
|
int second = dateTime.Second;
|
|
int millisecond = dateTime.Millisecond;
|
|
|
|
// BCD编码转换函数
|
|
byte BcdEncode(int value)
|
|
{
|
|
return (byte)((value / 10 * 16) + (value % 10));
|
|
}
|
|
|
|
// 构造BCD时间
|
|
// 注意:这里假设毫秒只取前两位(十位和个位),忽略剩余的毫秒数
|
|
byte secondTens = BcdEncode(second / 10);
|
|
byte secondUnits = BcdEncode(second % 10);
|
|
byte minuteTens = BcdEncode(minute / 10);
|
|
byte minuteUnits = BcdEncode(minute % 10);
|
|
byte hourTens = BcdEncode(hour / 10);
|
|
byte hourUnits = BcdEncode(hour % 10);
|
|
byte dayTens = BcdEncode(day / 10);
|
|
byte dayUnits = BcdEncode(day % 10);
|
|
byte monthTens = BcdEncode(month / 10);
|
|
byte monthUnits = BcdEncode(month % 10);
|
|
byte yearTens = BcdEncode(year / 10);
|
|
byte yearUnits = BcdEncode(year % 10);
|
|
|
|
// 组合成一个8字节的数
|
|
long bcdTime = (long)secondTens << 56 | (long)secondUnits << 52 |
|
|
(long)minuteTens << 48 | (long)minuteUnits << 44 |
|
|
(long)hourTens << 40 | (long)hourUnits << 36 |
|
|
(long)dayTens << 32 | (long)dayUnits << 28 |
|
|
(long)monthTens << 24 | (long)monthUnits << 20 |
|
|
(long)yearTens << 16 | (long)yearUnits;
|
|
|
|
return bcdTime;
|
|
}
|
|
public static byte[] ConvertToBcdTimeByte(DateTime dateTime)
|
|
{
|
|
// 将DateTime的各个部分分离出来
|
|
int year = dateTime.Year;
|
|
int month = dateTime.Month;
|
|
int day = dateTime.Day;
|
|
int hour = dateTime.Hour;
|
|
int minute = dateTime.Minute;
|
|
int second = dateTime.Second;
|
|
int millisecond = dateTime.Millisecond;
|
|
|
|
byte[] bytes= new byte[8];
|
|
bytes[0]= (byte)year;
|
|
bytes[1]= (byte)month;
|
|
bytes[2]= (byte)day;
|
|
bytes[3]= (byte)hour;
|
|
bytes[4]= (byte)minute;
|
|
bytes[5]= (byte)second;
|
|
bytes[6]= (byte)0;
|
|
bytes[7]= (byte)0;
|
|
return bytes;
|
|
}
|
|
}
|
|
}
|