Soenneker.Extensions.TimeSpan
11.0.1861
Prefix Reserved
dotnet add package Soenneker.Extensions.TimeSpan --version 11.0.1861
NuGet\Install-Package Soenneker.Extensions.TimeSpan -Version 11.0.1861
<PackageReference Include="Soenneker.Extensions.TimeSpan" Version="11.0.1861" />
<PackageVersion Include="Soenneker.Extensions.TimeSpan" Version="11.0.1861" />
<PackageReference Include="Soenneker.Extensions.TimeSpan" />
paket add Soenneker.Extensions.TimeSpan --version 11.0.1861
#r "nuget: Soenneker.Extensions.TimeSpan, 11.0.1861"
#:package Soenneker.Extensions.TimeSpan@11.0.1861
#addin nuget:?package=Soenneker.Extensions.TimeSpan&version=11.0.1861
#tool nuget:?package=Soenneker.Extensions.TimeSpan&version=11.0.1861
Soenneker.Extensions.TimeSpan
Format durations and convert clock-time TimeSpan values across time zones.
Installation
dotnet add package Soenneker.Extensions.TimeSpan
Format a duration
using Soenneker.Extensions.TimeSpan;
TimeSpan elapsed = TimeSpan.FromMinutes(65);
string compact = elapsed.ToDisplayFormat(); // "1h 5m"
string readable = elapsed.ToDisplayFormat(false); // "1 hour, 5 minutes"
ToDisplayFormat() chooses the two most significant units and treats a year as 365 days. Durations below one millisecond, including negative values, return "0s".
For fixed component formats, ToHourMinuteSecondString() uses hh:mm:ss and wraps hours after 23; ToMinuteSecondString() uses mm:ss and wraps minutes after 59. These are component displays, not total-hour or total-minute formats.
Work with times of day
TimeSpan localClock = new(9, 30, 0);
DateTime utcInstant = DateTime.UtcNow;
TimeSpan utcClock = localClock.ToUtcFromTz(utcInstant, timeZone);
TimeSpan roundTrip = utcClock.ToTzFromUtc(utcInstant, timeZone);
The conversion helpers interpret the TimeSpan as a clock time, apply the zone offset at the supplied instant (including daylight-saving and fractional-hour offsets), and normalize the result into [00:00:00, 24:00:00). Pass a UTC DateTime/DateTimeOffset that represents the date whose offset you need; a time zone cannot be converted correctly without a date.
ToShortTime() also treats the value as a clock time, normalizes it to one day, and emits an invariant 12-hour value such as "9:30 AM".
Test a clock range
bool open = new TimeSpan(23, 0, 0).IsBetween(
start: new TimeSpan(22, 0, 0),
end: new TimeSpan(2, 0, 0)); // true
IsBetween() is start-inclusive and end-exclusive and supports ranges that cross midnight. Equal start and end values represent an empty range, not a full day.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Soenneker.Extensions.DateTimeOffsets (>= 11.0.197)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.1861 | 113 | 11/3/2026 |
| 11.0.1860 | 73 | 11/3/2026 |
| 11.0.1859 | 67 | 11/3/2026 |
| 11.0.1858 | 117 | 10/27/2026 |
| 11.0.1857 | 100 | 10/26/2026 |
| 11.0.1856 | 93 | 10/26/2026 |
| 11.0.1855 | 91 | 10/26/2026 |
| 11.0.1854 | 94 | 10/26/2026 |
| 11.0.1853 | 93 | 10/26/2026 |
| 4.0.1851 | 438 | 10/15/2026 |
| 4.0.1850 | 114 | 10/14/2026 |
| 4.0.1849 | 104 | 10/14/2026 |
| 4.0.1847 | 97 | 10/14/2026 |
| 4.0.1846 | 102 | 10/14/2026 |
| 4.0.1841 | 107 | 10/13/2026 |
| 4.0.1840 | 100 | 10/12/2026 |
| 4.0.1838 | 105 | 10/12/2026 |
| 4.0.1837 | 111 | 10/12/2026 |
| 4.0.1836 | 100 | 10/11/2026 |
| 4.0.1835 | 109 | 10/11/2026 |
Updated Soenneker.Extensions.DateTimeOffsets to 11.0.197