Shuttle.Core.Cron 10.1.2

.NET Standard 2.0
NuGet\Install-Package Shuttle.Core.Cron -Version 10.1.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
dotnet add package Shuttle.Core.Cron --version 10.1.2
<PackageReference Include="Shuttle.Core.Cron" Version="10.1.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Shuttle.Core.Cron --version 10.1.2
#r "nuget: Shuttle.Core.Cron, 10.1.2"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Shuttle.Core.Cron as a Cake Addin
#addin nuget:?package=Shuttle.Core.Cron&version=10.1.2

// Install Shuttle.Core.Cron as a Cake Tool
#tool nuget:?package=Shuttle.Core.Cron&version=10.1.2

Shuttle.Core.Cron

PM> Install-Package Shuttle.Core.Cron

Provides cron expression parsing:

 ┌───────────── minute (0 - 59)
 │ ┌───────────── hour (0 - 23)
 │ │ ┌───────────── day of the month (1 - 31)
 │ │ │ ┌───────────── month (1 - 12)
 │ │ │ │ ┌───────────── day of the week (1 - 7): Sunday to Saturday 
 │ │ │ │ │                                   
 │ │ │ │ │
 │ │ │ │ │
 * * * * *

This implementation starts from the minute field (so no second). Any seconds are removed from all dates that are used.

CronExpression

public CronExpression(string expression, ISpecificationFactory specificationFactory = null) : this(expression, DateTime.Now, specificationFactory);
public CronExpression(string expression, DateTime date, ISpecificationFactory specificationFactory = null);

Creates a CronExpression instance and parses the given expression. The date specifies to root date from which to determine either the next or previous occurrence.

public DateTime NextOccurrence();
public DateTime NextOccurrence(DateTime date);

Returns the next date that would follow the given date. This is accomplished by adding 1 muinute to the relevant date. If no date is provided the root date will be used. This method also sets the root date to the result.

public DateTime GetNextOccurrence(DateTime date);

Returns the next date that would follow the given date. If the given date satisfies the required specification(s) then the date is returned as-is.

public DateTime PreviousOccurrence();
public DateTime PreviousOccurrence(DateTime date);

Returns the previous date that would precede the given date. This is accomplished by subtracting 1 muinute from the relevant date. If no date is provided the root date will be used. This method also sets the root date to the result.

public DateTime GetPreviousOccurrence(DateTime date);

Returns the previous date that would precede the given date. If the given date satisfies the required specification(s) then the date is returned as-is.

Cron Samples

Format is {minute} {hour} {day-of-month} {month} {day-of-week}

Field Options
minutes 0-59 , - * /
hours 0-23 , - * /
day-of-month 1-31 , - * ? / L W
month 1-12 or JAN-DEC , - * /
day-of-week 1-7 or SUN-SAT , - * ? / L #

If day-of-month is specified then day-of-week should be ? and vice-versa.

Examples:

* * * * * - is every minute of every hour of every day of every month
5,10-12,17/5 * * * * - minute 5, 10, 11, 12, and every 5th minute after that

Specifications

Specifications need to implement ISpecification<CronField.Candidate>.

You may pass an implementation of the ISpecificationFactory as a parameter to the CronExpression. There is a DefaultSpecificationFactory that accepts a function callback in the constructor for scenarios where an explicit ISpecificationFactory implementation may not be warranted, e.g.:

var factory = new DefaultSpecificationFactory(parameters =>
{
    return !parameters.Expression.Equals("H", StringComparison.InvariantCultureIgnoreCase) 
        ? null 
        : new Specification<CronField.Candidate>(candidate => candidate.Date.Day % 2 == 0);
});
Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Shuttle.Core.Cron:

Package Downloads
Shuttle.Esb.Scheduling The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

A simple scheduling solution built on Shuttle.Esb.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
10.1.2 89 9/4/2022
10.1.0 7,412 2/23/2020
10.0.6 4,692 1/15/2019
10.0.5 9,249 7/4/2018
10.0.4 685 7/3/2018
10.0.2 913 2/18/2018
10.0.1 620 2/17/2018