我可以更改当前日期时间而不影响其他程序吗?

时间:2014-10-10 10:50:07

标签: c# datetime

我需要模拟引用DateTime.utcNow的应用程序。

我想更改返回的时间,但不想弄乱我的电脑和任务计划器等。

是否可以更改从DateTime.Now和DatetIme.utcNow返回的内容,纯粹是在程序本身的上下文中?

1 个答案:

答案 0 :(得分:1)

在不实施依赖注入的情况下执行此操作的最简单方法是将所有对DateTime.UtcNow的调用替换为SystemTime.UtcNow()并添加以下类。

public static class SystemTime
{       
    public static Func<DateTime> UtcNow = () => DateTime.UtcNow;
}

然后在您的模拟代码中,您可以用

替换返回的代码
SystemTime.UtcNow = () => new DateTime(2000,1,1);

不要忘记您可能需要对DateTime.NowDateTime.Today等执行相同操作。此外,您还可以添加一项功能,以便您可以返回正常& #39;行为SystemTime.Reset()

public static class SystemTime
{       
    public static Func<DateTime> UtcNow = () => DateTime.UtcNow;
    public static Func<DateTime> Now = () => DateTime.Now;
    public static Func<DateTime> Today = () => DateTime.Today;

    public static void Reset()
    {
        UtcNow = () => DateTime.UtcNow;
        Now = () => DateTime.Now;
        Today = () => DateTime.Today;            
    }
}