Table of Contents

"Now" surfaces — System Clock stack

The System Clock stack exposes BCL "now" projections on IPrimeClock: DateTimeOffset, DateTime, TimeOnly, and DateOnly for both local and UTC time.

ServiceCollection services = [];
services.AddPrimeClock();

using ServiceProvider serviceProvider = services.BuildServiceProvider();
IPrimeClock primeClock = serviceProvider.GetRequiredService<IPrimeClock>();

ScenarioConsole.WriteLine($"LocalNowDateTimeOffset: {primeClock.LocalNowDateTimeOffset:O}");
ScenarioConsole.WriteLine($"UtcNowDateTimeOffset: {primeClock.UtcNowDateTimeOffset:O}");
ScenarioConsole.WriteLine($"LocalNowDateTime: {primeClock.LocalNowDateTime:O}");
ScenarioConsole.WriteLine($"UtcNowDateTime: {primeClock.UtcNowDateTime:O}");
ScenarioConsole.WriteLine($"LocalNowTimeOnly: {primeClock.LocalNowTimeOnly}");
ScenarioConsole.WriteLine($"LocalNowDateOnly: {primeClock.LocalNowDateOnly}");

return Task.CompletedTask;

What to notice

  • LocalNowDateTimeOffset / UtcNowDateTimeOffset preserve UTC offset and are the recommended surfaces for time-zone-aware code.
  • LocalNowDateTime returns a DateTime with Kind = DateTimeKind.Local; UtcNowDateTime returns DateTimeKind.Utc.
  • LocalNowTimeOnly / LocalNowDateOnly are convenience projections built on the net8.0 + net10.0 target frameworks.
  • The PrimeTime / NodaTime stack adds Instant, ZonedDateTime, LocalTime, and LocalDate projections on top of these.