使PetaPoco导致前端显示日期大8小时

在新项目中遇到了前端显示日期与数据库数据对不上时一头雾水,

 前端时间: 数据库时间:

上面对比可以看出,前端数据比数据库时间大八个小时。

首先判断可能是转json格式出错,所以特地写个时间变量time测试经json转换后是否出错。

 控制器方法: 

 前台数据: 

 

 

json转换后日期是时间戳,时间戳转换后可以看出date与控制器获取到的数据一致,而CreateDate则比控制器获取到的数据大八个小时,由此判断json转换是没有问题。

后来展开time与CreateDate的Date详情发现两者DateTime.Kind分别为Local、UTC(Kind官方解释:该值指示由此实例表示的时间是基于本地时间、协调世界时 (UTC),还是两者皆否)。

到此,前端时间为什么比数据库时间大八个小时显然是由于DateTime.Kind设置为UTC后json转换时是根据本地时区UTC+08:00得出。

  

 

为什么实体中DateTime类型的DateTime.Kind会是UTC,经过一番查找,发现是Petapoco框架中有个标准时间映射器

  

修改DateTimeKind.UTC为DateTimeKind.Local,最终解决时间差问题。

  

原文地址:https://www.cnblogs.com/binzi/p/9003185.html