Date and Time Derivative Models
H.Necessaire provides models for handling periods of time and inexact times and dates.
H.Necessaire provides models for handling periods of time and inexact times and dates.
Useful for scenarios like recurrence info, specific periods of time, approximate periods of time like historical data or incomplete details of certain subjects, filtering by certain date-time parts, etc.
These models are as follows:
dotnet add package H.Necessaire
PartialDateTime
Used for holding information about a possibly incomplete date and time.
Compared to DateTime
, it can basically have any missing piece... like no year, no month, no day, no minute, etc.
Useful, for instance, when you plan some event in the future and you know the year and month only, not the exact date; or when you only know the birth year of someone; or when you deal with some historical data for which you don't know the exact date; or when you need to define a recurrence plan; etc. You get the idea.
Usage
Here's an example of using the PartialDateTime
to represent a recurrent alarm
Full working sample on GitHub Samples Repo:
PeriodOfTime
Useful for holding an exact period of time.
Usefulness is obvious, for when you need to manage a precise period of time, say „The movie Blood Diamond will show from 2010-01-01 08:00:00 to 2010-02-01 16:30:42”.
public class PeriodOfTime
{
DateTime? From
DateTime? To
TimeSpan? Duration
bool IsSinceForever
bool IsUntilForever
bool IsInfinite
bool IsTimeless
}
Usage
Simple example, let's model the entire current day
PeriodOfTime today = new PeriodOfTime {
From = DateTime.Today,
To = DateTime.Today.AddDays(1).AddMilliseconds(-1),
};
PartialPeriodOfTime
Useful for holding an inexact period of time.
It's similar to PeriodOfTime
but the intervals are defined by PartialDateTime
.
public class PartialPeriodOfTime
{
PartialDateTime From
PartialDateTime To
DayOfWeek[] WeekDays
TimeSpan? Duration
bool IsSinceForever
bool IsUntilForever
bool IsInfinite
bool IsTimeless
}
Usage
As an example, let's model the working business hours.
Full working sample on GitHub Samples Repo:
ApproximatePeriodOfTime
Very similar to PartialPeriodOfTime, useful for holding inexact periods of time but when the start and end dates are in a known time-frame.
For example when storing fuzzy historical events, say "Jesus lived somewhere between 6-4 BC and 30-33 AC".
public class ApproximatePeriodOfTime
{
PartialPeriodOfTime StartPeriod
PartialPeriodOfTime EndPeriod
TimeSpan? MinimumDuration
TimeSpan? MaximumDuration
TimeSpan? AverageDuration
bool IsSinceForever
bool IsUntilForever
bool IsInfinite
bool IsTimeless
}
Usage
As an example let's model a rough road-trip plan
Full working sample on GitHub Samples Repo: