确保utc datetime持久化

时间:2013-07-18 11:51:08

标签: c# .net

我们假设我有一种情况,即在我持久化实体之前设置创建UTC日期时间。通常,我会这样做:

var something = new Something;
something.CreationDT = DateTime.UtcNow;
repo.Save(something);

确保始终发生这种情况的最佳方法是什么。我知道如何为测试目的创建一个DateTime包装器,但这对我来说没有必要帮助我,因为程序员仍然可以使用:

something.CreationDT = DateTime.Now;

是否有一种模式可以确保每个程序员都使用UTC?

1 个答案:

答案 0 :(得分:2)

如果总是想要在对象上强制使用UTC日期,这是确切的代码,那么就把它作为构造函数的一部分来做,例如。

public Something()
{
    CreatedDT = DateTime.UtcNow;
}
public DateTime CreatedDT { get; private set; }
...
Save(new Something());

显然,这不适合您在应用程序中先前创建对象并在以后保留的情况,但是,这似乎不是这种情况。

我肯定会避免允许用户在内部返回Now时设置UtcNow,这只会让人感到困惑。如果使用UtcNow 更好,因为它对开发人员来说更具可读性 - 很明显,的值是UTC。

对于这种事情,我通常会尝试让数据库做尽可能多的工作,所以我将默认值设置为当前的UTC日期/时间,所以我不需要担心从我的发送它客户端。