我正在将一个Subsonic项目迁移到PetaPoco。当Subsonic从数据库中提取DateTime列时,它将DateTime作为DateTimeKind.Unspecified返回。当PetaPoco水合POCO时,它将DateTimes设置为UTC。
TopTen Software的网站实际上有一篇博文提到了这个确切的问题: http://www.toptensoftware.com/Articles/84/PetaPoco-Value-Conversions-and-UTC-Times
但是有一个注释表明所概述的解决方案已经过时,并且链接到另一篇提到映射器的文章。我无法弄清楚如何将mappers添加到我的解决方案中以解决此问题。
答案 0 :(得分:1)
如果将此属性添加到POCO对象的DateTime属性,它会将DateTimeKind设置为UTC(但它不会进行任何转换)。
[Column(ForceToUtc=true)]
不得不深入挖掘资料来找到这个
为了实际转换为UTC,我修改了PetaPoco:
PetaPoco.cs - Ln 3738
改变这个:
return delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Utc); };
To This:
return delegate(object src) { return new DateTime(((DateTime)src).ToUniversalTime().Ticks, DateTimeKind.Utc); };
刚才意识到你问的是相反的情况。我必须进行这些更改才能返回正确的UTC日期。您可以修改PetaPoco以执行与此代码相反的操作:
return delegate(object src) { return new DateTime(((DateTime)src).Ticks, DateTimeKind.Unspecified); };