所以,我有一个非常大的项目与沉重的DI的地方。该解决方案架构过于复杂,非常复杂。 该解决方案是使用EF Code第一种方法开发的(不存在模型)以及大多数表格对象,它包含一个或多个DateTime属性。实体框架,代码优先和datetimes
它已经到了(过程中晚了!)到我需要将日期时间转换为UTC格式的点。对于数据库中的现有数据,我可以运行SQL脚本并轻松完成一次转换。
但是对于将来和运行的代码,什么是从UTC格式转换(在插入,更新和选择时)TO和FROM数据库并应用偏移量(即-2小时)的最佳方法是什么?向用户界面展示正确的日期时间? (即UTC到PST)
有一点需要记住的是,有很多代码,ALOT嵌套和深层隐藏代码,我希望能够找到最简单的方法,而不用触及所有对象,接口等......在EF内发出SQL命令时将其全部转换为UTC。我希望在存储时使用SQL Server方法转换为UTC,并在检索时从UTC转换而不是在.NET级别内转换。
任何想法或见解将不胜感激。
有没有代码在这里显示,因为这不是一个真正的编码问题,而是更多关于如何获得EF执行(当它在调用SQL之前构造查询时)的深入讨论SQL Server函数for转换为UTC和从UTC转换并返回具有正确日期时间的结果集。
谢谢。
不要紧多少代码有 - 避免mixups的唯一方法是使用正确的类型:'datetimeoffset'数据库和'DateTimeOffset'为.NET。此外,UTC的含义是什么?有或没有夏令时?至于时区*名称*,三字缩写词不是标准的。唯一的“标准”是包含在像NodaTime这样的图书馆中的IANA数据库。 PS PS。 –
PS。这*是一个与EF无关的编码问题。正如无法避免错误,如果您使用ASCII而不是Unicode,那么如果使用'datetime'而不是'datetimeoffset',则无法避免错误。即使这样也不能阻止时区规则发生变化时的问题,就像他们在俄罗斯所做的那样 - 在过去的十年里至少有三次。如果您的域名需要它,您可能必须将IANA tz名称存储在单独的列中,例如“俄罗斯/莫斯科”以避免规则更改问题 –
如果您使用UTC捕捉时间,则在堆栈中从UI本地日期/时间)尽可能早到UTC,并尽可能晚地从UTC转换为特定地点的日期/时间。你的问题不是一个非常具体的问题,它的解释是开放的,而且更多的是基于观点的。我会[使用谷歌](https://www.google.com/search?q=storing%20utc%20c%23&rct=j),而不是做更多的研究,你不会得到这个线程好/尖的答案。一旦你对如何处理它有了更好的想法,并有尖锐的问题回来问他们。 – Igor