Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保utc日期时间保持不变_C#_.net - Fatal编程技术网

C# 确保utc日期时间保持不变

C# 确保utc日期时间保持不变,c#,.net,C#,.net,假设我在保存实体之前设置了创建UTC日期时间。通常,我会这样做: var something = new Something; something.CreationDT = DateTime.UtcNow; repo.Save(something); 确保这种情况始终发生的最佳方式是什么。我知道如何为测试目的创建DateTime包装器,但这并没有必要帮助我,因为程序员仍然可以使用: something.CreationDT = DateTime.Now; 是否有一种模式可以确保每个程序员都使

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

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是的,这是另一种选择,但是,我认为最好的方法是让数据库为您生成日期/时间(如果可能)。