16进制BYTE[]数组中的数值如何转换成DATE日期型

ba_wang_mao 2020-07-31 11:04:40

我单片机上传给C#上位机的报文中

byte[0] = 0x14 -----> 十进制 20,代表年份,其中20+2000=2020年
byte[1] = 0x08 ------>十进制 8,代表月份
byte[2] = 0x03 ------>十进制 3,代表日

byte[3] = 0x0A ------>十进制10,代表小时
byte[4] = 0x09 ------>十进制9,代表分钟
byte[5] = 0x06 ------>十进制6,代表秒

我想在C#中完成如下功能:

1、取出年份,月份,日期 3个数值合并成 2020-08-03 送到数据库的DATE字段
2、取出小时,分钟,秒 3个数值合并成10:09:06 送到数据库的TIME字段
3、我编写了如下代码
                int year    = 2000 + Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[0] }, 0));
int month = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[1] }, 0));
int day = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[2] }, 0));
int hour = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[3] }, 0));
int minute = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[4] }, 0));
int second = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[5] }, 0));
DateTime dt = new DateTime(year, month, day, hour, minute, second);


打断点发现,得到的年份为2014,显然是错误的,应该为2020
同时运行到int hour = Convert.ToInt32(BitConverter.ToString(new byte[1] { bytes[3] }, 0)); 时系统报错,错误信息为:
输入字符串的格式不正确






...全文
831 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-08-20
  • 打赏
  • 举报
回复
1.npoI当然可以设置单元格格式,怎么设置自己百度 2.如果不想弄麻烦的设置单元格格式操作,那么你写到excel的时候,直接Tostring 就好
ba_wang_mao 2020-08-20
  • 打赏
  • 举报
回复
Excel无法设置日期格式呀!因为我是用NPOI导出来自动生成的,难道要写代码,强制这个单元格的格式吗?
E次奥 2020-07-31
  • 打赏
  • 举报
回复
都拿到DateTime了,时间格式化就行了;

yyyy/MM/dd HH:mm:ss
ba_wang_mao 2020-07-31
  • 打赏
  • 举报
回复

                int year = 2000 + (int)bytes[0];
int month = (int)bytes[1];
int day = (int)bytes[2];
int hour = (int)bytes[3];
int minute = (int)bytes[4];
int second = (int)bytes[5];
DateTime dt = new DateTime(year, month, day, hour, minute, second);




转换已经搞定,请问:
1、如何将dt型变量中的日期 2020/08/03 取出来送到数据库的DATE字段
2、如何将dt型变量中的时间10:35:58 取出来送到数据库的TIME字段
ba_wang_mao 2020-07-31
  • 打赏
  • 举报
回复
是这样的,数据库别人定义了2个字段,1个字段为DATE型,另外一个字段为TIME型。
1、我需要把C#的DATETIME变量中的年份、月份和日期写入到数据库的DATE型字段中
2、我需要把C#的DATETIME变量中的小时、分钟和秒 写入到数据库的TIME型字段中
3、Excel无法设置日期格式呀!我是用NPOI导出来的。


八爻老骥 2020-07-31
  • 打赏
  • 举报
回复
引用 4 楼 icoolno1 的回复:
[quote=引用 3 楼 ba_wang_mao 的回复:]我已经拿到DateTime了,我往数据库的DATE字段写时,采用如下方法

     DateTime dt = BytesToDateTime(YearArray);
cmd.Parameters.AddWithValue("@d_date", dt); //C# DATATIME变量写到数据库DATE字段
cmd.Parameters.AddWithValue("@d_time", dt); //C# DATATIME变量写到数据库TIME字段


但是结果不对,从数据库导出到EXCEL文件中,可以观察到 数据库的DATE字段D_DATE后面冒出了多余的00:00:00
参见下图


请问:
如何去除 年/月/日 后面多余的00:00:00呢?


数据库里改成Date型。[/quote]

Excel里设置日期格式。
八爻老骥 2020-07-31
  • 打赏
  • 举报
回复
引用 3 楼 ba_wang_mao 的回复:
我已经拿到DateTime了,我往数据库的DATE字段写时,采用如下方法

     DateTime dt = BytesToDateTime(YearArray);
cmd.Parameters.AddWithValue("@d_date", dt); //C# DATATIME变量写到数据库DATE字段
cmd.Parameters.AddWithValue("@d_time", dt); //C# DATATIME变量写到数据库TIME字段


但是结果不对,从数据库导出到EXCEL文件中,可以观察到 数据库的DATE字段D_DATE后面冒出了多余的00:00:00
参见下图


请问:
如何去除 年/月/日 后面多余的00:00:00呢?


数据库里改成Date型。
ba_wang_mao 2020-07-31
  • 打赏
  • 举报
回复
我已经拿到DateTime了,我往数据库的DATE字段写时,采用如下方法

     DateTime dt = BytesToDateTime(YearArray);
cmd.Parameters.AddWithValue("@d_date", dt); //C# DATATIME变量写到数据库DATE字段
cmd.Parameters.AddWithValue("@d_time", dt); //C# DATATIME变量写到数据库TIME字段


但是结果不对,从数据库导出到EXCEL文件中,可以观察到 数据库的DATE字段D_DATE后面冒出了多余的00:00:00
参见下图


请问:
如何去除 年/月/日 后面多余的00:00:00呢?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧