Skip to content

Simple library for abstracting time in dotnet projects

License

Notifications You must be signed in to change notification settings

gigi81/Chronos.Net

 
 

Repository files navigation

NuGet Version Build Status Quality Gate Status

Chronos.Net

Simple library to help abstracting time in dotnet projects, usually for testing purpose.

Chronos.Abstractions

NuGet Version Chronos.Abstractions package in Vivien_NuGet feed in Azure Artifacts

Contains:

  • An IDateTimeProvider interface which exposes Now or UtcNow properties.
  • An IDateTimeOffsetProvider interface which exposes Now or UtcNow properties.

Chronos.Net

NuGet Version Chronos.Net package in Vivien_NuGet feed in Azure Artifacts

Contains:

  • A simple implementation DateTimeProvider of the IDateTimeProvider interface.
  • A simple implementation DateTimeOffsetProvider of the IDateTimeOffsetProvider interface.
  • And 2 IServiceCollection extensions method to provide default implementations:
    • AddDateTimeProvider() to provide a singleton of DateTimeProvider when an IDateTimeProvider is required
    • AddDateTimeOffsetProvider() to provide a singleton of DateTimeOffsetProvider when an IDateTimeOffsetProvider is required
public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddDateTimeProvider();
    services.AddDateTimeOffsetProvider();
    ...
}

Chronos.AspNetCore [Deprecated]

NuGet Version Chronos.AspNetCore package in Vivien_NuGet feed in Azure Artifacts

Chronos.AspNetCore was kept for compatibility reasons, but should be removed in further releases. Please use the IServiceCollection extensions from Chronos.Net instead which requires less dependencies.

Contains:

  • And 2 WebHostBuilder extensions method to provide default implementations:
    • UseDateTimeProvider() to provide a singleton of DateTimeProvider when an IDateTimeProvider is required
    • UseDateTimeOffsetProvider() to provide a singleton of DateTimeOffsetProvider when an IDateTimeOffsetProvider is required
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseDateTimeProvider()
    .UseDateTimeOffsetProvider()
    .UseStartup<Startup>();

Usage

Then instead of using DateTime.Now, DateTime.UtcNow, DateTimeOffset.Now or DateTimeOffset.UtcNow, you should use IDateTimeProvider.Now, IDateTimeProvider.UtcNow, IDateTimeOffsetProvider.Now or IDateTimeOffsetProvider.UtcNow which would enable you to fake/mock the time in your tests.
Example with FakeItEasy:

var dateTimeProvider = A.Fake<IDateTimeProvider>();
A.CallTo(() => dateTimeProvider.Now).Returns(new DateTime(2019, 3, 6, 9, 0, 0));
var franceOffset = TimeZoneInfo.FindSystemTimeZoneById("Romance Standard Time").BaseUtcOffset;
var dateTimeOffsetProvider = A.Fake<IDateTimeOffsetProvider>();
A.CallTo(() => dateTimeOffsetProvider.Now).Returns(new DateTime(2019, 3, 6, 9, 0, 0, franceOffset));

A sample web project can be found in the samples folder

About

Simple library for abstracting time in dotnet projects

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%