Это все хорошие ответы, это то, что я сделал в другом проекте:
Использование:
Получить РЕАЛЬНУЮ сегодняшнюю дату Время
var today = SystemTime.Now().Date;
Вместо использования DateTime.Now, вам нужно использовать SystemTime.Now()
... Это не сложное изменение, но это решение может быть не идеальным для всех проектов.
Путешествие во времени (Пройдет 5 лет в будущем)
SystemTime.SetDateTime(today.AddYears(5));
Получите нашу подделку «сегодня» (через 5 лет будет «сегодня»)
var fakeToday = SystemTime.Now().Date;
Сброс даты
SystemTime.ResetDateTime();
/// <summary>
/// Used for getting DateTime.Now(), time is changeable for unit testing
/// </summary>
public static class SystemTime
{
/// <summary> Normally this is a pass-through to DateTime.Now, but it can be overridden with SetDateTime( .. ) for testing or debugging.
/// </summary>
public static Func<DateTime> Now = () => DateTime.Now;
/// <summary> Set time to return when SystemTime.Now() is called.
/// </summary>
public static void SetDateTime(DateTime dateTimeNow)
{
Now = () => dateTimeNow;
}
/// <summary> Resets SystemTime.Now() to return DateTime.Now.
/// </summary>
public static void ResetDateTime()
{
Now = () => DateTime.Now;
}
}