0

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

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

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

something.CreationDT = DateTime.Now;

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

4

1 回答 1

2

如果您总是想在对象上强制使用 UTC 日期并且这是确切的代码,那么只需将其作为构造函数的一部分执行,例如

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

显然,这不适合您在应用程序中较早创建对象并稍后持久存在的情况,但是,这里似乎并非如此。

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

对于这类事情,我通常会尽量让数据库做尽可能多的工作,这样我就可以将默认值设置为当前的 UTC 日期/时间,这样我就完全不用担心从客户端发送它了.

于 2013-07-18T11:57:15.343 回答