上传给上位机的时间(年、月、日、时、分、秒)通过DateTime转换成日期型变量写到数据库,发现时间在凌晨0:10到8:00有问题,如何解决?

ba_wang_mao 2020-09-21 12:15:33

单片机上传给上位机的时间(年、月、日、时、分、秒),上位机通过DateTime转换成日期型变量写到数据库,其它时段,数据库存储的时间正确,但是凌晨00:10---08:00 这段时间,数据库存储的时间有问题,问题如下:

1、单片机上传的是2020年9月21日0点10分0秒
数据库存储的是2020年9月20日0点10分0秒。
2、单片机上传的是2020年9月21日8点0分0秒
数据库存储的是2020年9月20日8点0分0秒。
3、单片机上传的其它时段的时间,数据库存储OK


4、单片机上传的时间保存在字节缓冲区中,通过如下代码转换成DateTime型变量写到数据库:

      private DateTime BytesToDateTime(byte[] bytes)
{
if (bytes != null && bytes.Length >= 6)
{
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);
return dt;
}
else
{
return new DateTime();
}
}



请问:什么原因呢?难道是没有考虑北京东8区吗?
...全文
3885 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ba_wang_mao 2020-09-25
  • 打赏
  • 举报
回复
奇怪了,0点之后,日期又变成昨天的日期,到了8点钟之后,日期又自动对了。
ba_wang_mao 2020-09-25
  • 打赏
  • 举报
回复
经过排查,确实是单片机上传的日期bytes[2]是错误的。 我把单片机上传报文中的年月日时分秒提取出来,显示到TEXTBOX控件中,运行一晚上发现确实是单片机上传的日期错误。 我就搞不懂了,我是读取的时钟芯片SD2405ALPI的时间,为什么时钟芯片的时间会出现这种情况呢?
wanghui0380 2020-09-21
  • 打赏
  • 举报
回复
我只能说中国的时区在东八区 你中间过了好几道,所以我们无法回答,你到底哪里有问题
ba_wang_mao 2020-09-21
  • 打赏
  • 举报
回复
ba_wang_mao 2020-09-21
  • 打赏
  • 举报
回复
关键是其它时间段的时间是对的,只有凌晨 0:10---8:00之间的时间不对(注:我每隔10分钟上传一次时间)。 凌晨 0:10---8:00之间的时间不对,只是【日期 day 】不对,年份、月份、小时、分钟、秒都是对的。 例如:单片机上传时间为 2020-09-21 00:10:00 应该记录为 2020-09-21 00:10:00 实际记录为 2020-09-20 00:10:00 --->只是【日期】却记录成昨天的日期,其它正确
八爻老骥 2020-09-21
  • 打赏
  • 举报
回复
bytes[2]得到就是错的吧,多数是单片机传值不对。

110,566

社区成员

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

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

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