C# Asp.net MVC覆盖linq到sql的默认getter和setter,用于进行UTC转换

C# Asp.net MVC覆盖linq到sql的默认getter和setter,用于进行UTC转换,c#,asp.net-mvc,linq-to-sql,utc,C#,Asp.net Mvc,Linq To Sql,Utc,我的应用程序即将推出utc支持 我已经完成了所有的工作,并为自己编写了两个实用程序类,称为convertToUtc和convertFromUtc。我想你能猜到他们在干什么 我当时在想,我可以在linq to sql创建的对象模型上为我的date属性将这些方法构建到getter和setter方法中,还是应该在应用程序中到处转转,重新分配值的保存方式(在控制器中添加一行,如 task.taskDeadline = Utility.ConvertToUtc(aspnet_Repository.GetU

我的应用程序即将推出utc支持

我已经完成了所有的工作,并为自己编写了两个实用程序类,称为convertToUtc和convertFromUtc。我想你能猜到他们在干什么

我当时在想,我可以在linq to sql创建的对象模型上为我的date属性将这些方法构建到getter和setter方法中,还是应该在应用程序中到处转转,重新分配值的保存方式(在控制器中添加一行,如

task.taskDeadline = Utility.ConvertToUtc(aspnet_Repository.GetUserGuid(User.Identity.Name), task.taskDeadline.Value);
如果有人能告诉我,每次我需要用户Guid时,我都会返回数据库,这会很酷。我想我会在某个地方缓存它,但这需要在会话中保持它,或者我猜是这样的


谢谢大家。

您应该始终将日期时间存储在数据库中作为UTC值(如果您知道对象的真实UTC时间),而不是本地时间值

从UTC时间到localtime的转换[主要]是一个渲染问题,应该在UI层中处理


后一个规则的一个例外是,当您尝试按用户的日期时间分组时(例如,昨天或上个月发生的事情)在这种情况下,UI需要将时区向下传递到业务层,甚至可能传递到数据库,以便执行按日期时间的本地表示形式分组的有效查询。

您应该始终将日期时间存储在数据库中作为UTC值(如果您知道对象的真实UTC时间)而且永远不会作为本地时间值

从UTC时间到localtime的转换[主要]是一个渲染问题,应该在UI层中处理


后一个规则的一个例外是,当您尝试按用户的日期时间分组时(例如,昨天或上个月发生的事情)在这种情况下,UI需要将时区向下传递到业务层,甚至可能传递到数据库,以便执行按日期时间的本地表示形式分组的高效查询。

即使在这种情况下这不是一个好的解决方案,最好知道使用linq to sql是否可行。我认为在这种情况下,它将是最好在对象上使用将时间移到utc或从utc移到utc的方法,因为这样可以使代码简单,但可以让我获得所需的任何时间。即使在这种情况下这不是一个好的解决方案,最好知道使用linq to sql是否可行。我认为在这种情况下,最好在对象上使用将时间移到utc或从utc移到utc,因为这使代码保持简单,但使我能够获得所需的任何时间。可以通过将用户时区与用户一起存储为GMT的偏移量(即-12和+13之间的数字)来处理例外情况。每次用户登录时更新用户时区(如果是web应用程序,使用javascript很容易)。是的,您需要将时区从UI传递到业务层(如我所述),但它不是一个整数:时区可以是十进制值。此外,严格来说,您需要完整的时区信息,而不仅仅是偏移量,以便能够在DST更改时在一年中的各个时间正确分组(大多数人不会这样做,因为这非常困难)。可以通过将用户时区与用户一起存储为GMT的偏移量(即-12和+13之间的数字)来处理例外情况。每次用户登录时更新用户时区(如果是web应用,则使用javascript很容易做到)。是的,您需要将时区从UI传递到业务层(如我所述),但它不是一个整数:时区可以是十进制值。此外,严格来说,您需要完整的时区信息,而不仅仅是偏移量,以便能够在DST更改时正确分组(大多数人不这样做,因为这非常困难)。