Skip to content

Testably/aweXpect.Chronology

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

aweXpect.Chronology

Nuget Build Quality Gate Status Coverage Mutation testing badge

Extension methods for creating chronology objects like TimeSpan or DateTime that read more natural.

Installation

dotnet add package aweXpect.Chronology

Or add a <PackageReference> to your project file:

<PackageReference Include="aweXpect.Chronology" Version="*" />

Supported target frameworks: .NET Standard 2.0, .NET 8, .NET 10. DateOnly and TimeOnly conversions require .NET 8 or higher.

Reference

Category Methods Example Result
TimeSpan units Milliseconds, Seconds, Minutes, Hours, Days 5.Minutes() TimeSpan
TimeSpan operators +, -, * (by double), / (by double), unary - 5.Minutes() * 2 TimeSpan
Date JanuaryDecember 24.December(2024) DateTime
Time of day At(hours, minutes, [seconds], [milliseconds]), At(TimeSpan) 24.December(2024).At(18, 30) DateTime
Kind AsUtc, AsLocal 24.December(2024).AsUtc() DateTime
Offset WithOffset(TimeSpan) 24.December(2024).WithOffset(2.Hours()) DateTimeOffset
Relative Before, After 3.Hours().Before(25.December(2024)) DateTime
.NET 8+ conversions implicit casts to DateOnly / TimeOnly DateOnly d = 24.December(2024); DateOnly / TimeOnly

TimeSpan

Add the following extension methods on int and double that allow creating a TimeSpan:

  • .Milliseconds()
  • .Seconds()
  • .Minutes()
  • .Hours()
  • .Days()

Traditional:

TimeSpan timeout = TimeSpan.FromSeconds(10);

With aweXpect.Chronology:

TimeSpan timeout = 10.Seconds();

It is also possible to combine multiple extension methods:

TimeSpan timeout = 1.Minutes(30.Seconds());

The builder also supports arithmetic operators +, -, * (by double), / (by double) and unary negation:

TimeSpan doubled = 5.Minutes() * 2;
TimeSpan combined = 1.Minutes() + 30.Seconds();
TimeSpan negative = -10.Seconds();

DateTime

Add extension methods on int for each month that allow creating a DateTime:

Traditional:

DateTime time = new DateTime(2024, 12, 24);

With aweXpect.Chronology:

DateTime time = 24.December(2024);

A time of day can be specified with explicit components or a TimeSpan:

DateTime time = 24.December(2024).At(18, 30);
DateTime preciseTime = 24.December(2024).At(18, 30, 45, 500);
DateTime fromTimeSpan = 24.December(2024).At(18.Hours(30.Minutes()));

Set the DateTimeKind with AsUtc() or AsLocal():

DateTime utc = 24.December(2024).At(18, 30).AsUtc();
DateTime local = 24.December(2024).At(18, 30).AsLocal();

Combine with TimeSpan extensions to express relative dates with Before or After:

DateTime earlier = 3.Hours().Before(25.December(2024));
DateTime later = 3.Hours().After(25.December(2024));

DateTimeOffset

Use WithOffset to attach a UTC offset to a date or date-and-time:

DateTimeOffset time = 24.December(2024).At(14, 30).WithOffset(2.Hours());

DateOnly and TimeOnly (.NET 8+)

On .NET 8 and later, the builders implicitly convert to DateOnly and TimeOnly:

DateOnly date = 24.December(2024);
TimeOnly time = 18.Hours(30.Minutes());

About

Extension methods for creating chronology objects like `TimeSpan` or `DateTime` that read more natural.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Contributors