C# 确保utc日期时间保持不变
假设我在保存实体之前设置了创建UTC日期时间。通常,我会这样做:C# 确保utc日期时间保持不变,c#,.net,C#,.net,假设我在保存实体之前设置了创建UTC日期时间。通常,我会这样做: var something = new Something; something.CreationDT = DateTime.UtcNow; repo.Save(something); 确保这种情况始终发生的最佳方式是什么。我知道如何为测试目的创建DateTime包装器,但这并没有必要帮助我,因为程序员仍然可以使用: something.CreationDT = DateTime.Now; 是否有一种模式可以确保每个程序员都使
var something = new Something;
something.CreationDT = DateTime.UtcNow;
repo.Save(something);
确保这种情况始终发生的最佳方式是什么。我知道如何为测试目的创建DateTime包装器,但这并没有必要帮助我,因为程序员仍然可以使用:
something.CreationDT = DateTime.Now;
是否有一种模式可以确保每个程序员都使用UTC?如果您总是想在对象上强制使用UTC日期,并且这是确切的代码,那么只需作为构造函数的一部分来执行,例如
public Something()
{
CreatedDT = DateTime.UtcNow;
}
public DateTime CreatedDT { get; private set; }
...
Save(new Something());
显然,这不适用于您在应用程序中较早创建对象并在以后持久化的场景,但是,这里的情况似乎并非如此
我绝对不会允许用户现在设置
,而在内部返回UtcNow
,这只会让人感到困惑。如果使用UtcNow
更好,因为它对开发人员来说更具可读性-很明显,该值必须是UTC
对于这类事情,我通常尝试让DB做尽可能多的工作,这样我就可以将默认值设置为当前UTC日期/时间,这样我就不必担心从我的客户机发送它。删除(公共)CreationDT setter,并在构造函数中将其设置为UtcNow?您也可以让repo.Save处理这个问题,因此,您(或其他开发人员)不必一次又一次地重复同一行。您是否查看了DateTimeOffset而不是DateTime?嗨,Henk。那会有什么不同呢?构造器假设了很多。只有单类应用的解决方案。是的,这很有意义。我想如果所有实体都有CreationDT,那么也可以在repositories save方法中设置它。@csetzkorn是的,这是另一种选择,但是,我认为最好的方法是让数据库为您生成日期/时间(如果可能)。