请确保持久化utc-datetime

本文关键字:utc-datetime 持久化 确保 | 更新日期: 2023-09-27 18:23:56

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

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

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

something.CreationDT = DateTime.Now;

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

请确保持久化utc-datetime

如果总是想在对象上强制使用UTC日期,而这正是代码,那么只需将其作为构造函数的一部分即可,例如

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

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

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

对于这类事情,我通常会让DB做尽可能多的工作,这样我就可以将默认值设置为当前UTC日期/时间,这样我根本不需要担心从我的客户端发送它。