在新项目中遇到了前端显示日期与数据库数据对不上时一头雾水,
前端时间: 数据库时间:
上面对比可以看出,前端数据比数据库时间大八个小时。
首先判断可能是转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,最终解决时间差问题。
来源:oschina
链接:https://my.oschina.net/u/4320349/blog/3981857