All notable changes to CronTimer are documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
2.1.0 - 2026-02-15
Bug fixes for timezone handling and restart behavior, plus new TimeProvider support for testability on net8.0+.
- Add
TimeProvidersupport onnet8.0+— pass an optionalTimeProviderto the constructor for deterministic testing withFakeTimeProvider(e841bb3) - Add
net8.0target framework to the NuGet package (e841bb3) - Include README in NuGet package via
PackageReadmeFile(5127b39)
- Fix timezone conversion using configured timezone instead of system timezone —
ToUniversalTime()incorrectly used the host timezone, causing wrong firing times when the host timezone differs from the configured one (522efd4) - Fix Start/Stop/Start skipping an interval — restarting the timer now recalculates the next occurrence from the current time (84f169f)
- Add SourceLink for debugger source mapping (579e119)
- Condition
ContinuousIntegrationBuildon CI only (579e119) - Remove broken
PackageProjectUrland redundantIncludeSource(579e119) - Migrate to
.slnxsolution format (98a64d7) - Use MinVer for version derivation from git tags (ef739e7)
- Add justfile with build, test, and pack recipes (7ed9536)
- Add GitHub Actions CI workflow with Ubuntu and Windows jobs (7ed9536, 6e72f0e)
- Add NUnit test project with TimeProvider-based testing (df7ca81)
- Bump Microsoft.Extensions.TimeProvider.Testing from 9.0.0 to 10.3.0
- Bump Microsoft.NET.Test.Sdk from 17.12.0 to 18.0.1
- Bump Microsoft.SourceLink.GitHub from 8.0.0 to 10.0.103
- Bump MinVer from 6.0.0 to 7.0.0
- Bump NUnit from 4.3.2 to 4.4.0
- Bump NUnit3TestAdapter from 4.6.0 to 6.1.0
2.0.0 - 2022-12-29
Breaking release that drops net35 support due to upstream dependency changes.
- Drop
net35target — TimeZoneConverter no longer supports net35 (a43f847)
- No longer pinning external dependencies to a version range (a44cc21)
- TimeZoneConverter 6.0.1 (4831478)
1.0.2 - 2022-12-29
Fixes a bug where the timer could fire multiple times for the same timestamp, and adds event args so subscribers know which occurrence triggered them.
- Add
Atproperty toCronTimerEventArgsso subscribers can retrieve the timestamp for which they were invoked (3a09b25)
- Fix timer firing multiple times for the same timestamp when the timer callback ran early — next occurrence is now calculated from the previous scheduled time instead of the current clock value (f17c325)
1.0.1 - 2021-03-16
Fixes a crash when calling Stop and allows restarting a stopped timer.
- Create timer in constructor so that
Stop()no longer throwsNullReferenceException, and allow the instance to be restarted after stopping (3f637d7)
1.0.0 - 2020-12-03
Initial release.